• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:SQL(初心者です) 3つのテーブルを結合)

SQLで3つのテーブルを結合する方法

このQ&Aのポイント
  • SQL初心者の方が3つのテーブルを結合する方法について質問されています。具体的な条件として、品種機械テーブルから使用日付が最大の行データを取得し、その品種と一致する行データを品種テーブル、機械テーブルからそれぞれ取得する方法を教えて欲しいとのことです。
  • 質問者はうまい方法が思いつかないため、アドバイスや参考になりそうなホームページなどを教えてほしいとも述べています。
  • 上記の質問文章はSQLの初心者が3つのテーブルを結合する方法についての質問です。具体的な条件としては、品種機械テーブルから使用日付が最大の行データを取得し、その品種と一致する行データを品種テーブル、機械テーブルからそれぞれ取得する方法を知りたいとのことです。また、質問者はうまい方法が思いつかないため、アドバイスや参考になりそうなホームページなどを教えてほしいとも述べています。

質問者が選んだベストアンサー

  • ベストアンサー
  • bonaron
  • ベストアンサー率64% (482/745)
回答No.3

#1の bonaronです。 仕様を誤解してました。 それも、途中のクエリをアップしてしまった(^^; >3.機械テーブルを読み込む >2で取得した機械と一致する行データをすべて取得 ということで、(1)品種テーブルには、マシンのフィールドがあるのでしょうか? 品種 マシン・・・ A  1 A  2 ・  ・ A  9 B  21 ・  ・ のように。 仕様の確認ですが 1.(3)のテーブルから[使用日付]の   最大値 "20051204"を取得。 2.(3)のテーブルから"20051204" の品種(A,B,D等)を取得。 3.品種テーブルから、2の A,B,D のデータを取得。   上の品種テーブルの例ではA-1~A-9、B-21~・・。 4.機械テーブルから、3の 1,2,・・・9,21・・・を取得。   最終的に必要なのは、このデータのみ。 上記仕様のクエリです。 SELECT * FROM 機械テーブル INNER JOIN [SELECT マシン FROM 品種テーブル WHERE 品種 In (SELECT DISTINCT 品種 FROM 品種機械テーブル WHERE 使用日付=DMax("使用日付","品種機械テーブル"););]. AS Q品種 ON 機械テーブル.マシン = Q品種.マシン ORDER BY 機械テーブル.マシン; #2回答者さんへ >#1回答者さんが使用している「TOP」は、SQL SERVERだけの機能だと思います。 Accessにも、もちろん「TOP」は存在します。 クエリのプロパティの「トップ値」です。

その他の回答 (3)

  • bonaron
  • ベストアンサー率64% (482/745)
回答No.4

#3の補足です。 品種A、品種Bに同じマシンがある場合2つ抽出されます。 1つだけにするには、 [SELECT マシン FROM 品種テーブル  を [SELECT DISTINCT マシン FROM 品種テーブル  にします。

nishimu
質問者

お礼

参考にさせて作業させてもらいます。ありがとうございます。

回答No.2

>品種でユニークしますが使用日付を降順にならべ変え ます。 >品種機械テーブルから使用日付がMAXのものの行データをすべて取得 「品種でユニークします」とは、どういう意味ですか? (3)のデータでは、品種は重複していますが? 使用日付のMAX値のデータだけが必要なのに、「降順に並べ替える」という無駄な操作を行いたい理由は? #1回答者さんが使用している「TOP」は、SQL SERVERだけの機能だと思います。

  • bonaron
  • ベストアンサー率64% (482/745)
回答No.1

SELECT TOP 1 品種機械.*, 品種.*, 機械.* FROM (品種機械 INNER JOIN 品種 ON 品種機械.品種 = 品種.品種) INNER JOIN 機械 ON 品種機械.マシン = 機械.マシン ORDER BY 品種機械.使用日付 DESC; 品種,マシンは 2度表示されますが、 それは、偉業目の「*」を個々のフィールド名にすることで、 回避できます。

関連するQ&A