プロが教えるわが家の防犯対策術!

下のような3つのテーブルを結合したいのですが
SQL1つで可能でしょうか?

条件は
1.品種機械テーブルを読み込みます。
品種でユニークしますが使用日付を降順にならべ変えます。品種機械テーブルから使用日付がMAXのものの行データをすべて取得(下の場合:A 4 20051204・・)ほかはいりません。

2.品種テーブル読み込む。
1で取得した品種と一致する行データをすべて取得

3.機械テーブルを読み込む
2で取得した機械と一致する行データをすべて取得

うまい方法がおもいつかないのでアドバイスや
参考になりそうなホームページなどありましたら教えていただけないでしょうか?
宜しくお願いします。

---------------------------------------------
(1)品種テーブル(品種を管理)
品種  ・・・etc
A  
B
C
D
---------------------------------------------
(2)機械テーブル(機械を管理)
マシン ・・・etc
1
2
3
4
------------------------------------------
(3)品種機械テーブル(品種と機械を管理)
品種 | マシン | 使用日付 |・・・etc
A | 1 | 20051201
A | 2 | 20051202
A | 3 | 20051203
A | 4 | 20051204

A 回答 (4件)

#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」は存在します。
クエリのプロパティの「トップ値」です。
    • good
    • 0

#3の補足です。



品種A、品種Bに同じマシンがある場合2つ抽出されます。

1つだけにするには、
[SELECT マシン FROM 品種テーブル
 を
[SELECT DISTINCT マシン FROM 品種テーブル
 にします。
    • good
    • 0
この回答へのお礼

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

お礼日時:2005/12/30 21:47

>品種でユニークしますが使用日付を降順にならべ変え


ます。
>品種機械テーブルから使用日付がMAXのものの行データをすべて取得

「品種でユニークします」とは、どういう意味ですか?
(3)のデータでは、品種は重複していますが?

使用日付のMAX値のデータだけが必要なのに、「降順に並べ替える」という無駄な操作を行いたい理由は?

#1回答者さんが使用している「TOP」は、SQL SERVERだけの機能だと思います。
    • good
    • 0

SELECT TOP 1 品種機械.*, 品種.*, 機械.*


FROM (品種機械 INNER JOIN 品種 ON 品種機械.品種 = 品種.品種) INNER JOIN 機械 ON 品種機械.マシン = 機械.マシン
ORDER BY 品種機械.使用日付 DESC;

品種,マシンは 2度表示されますが、
それは、偉業目の「*」を個々のフィールド名にすることで、
回避できます。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!