• 締切済み

3つのテーブルからの抽出SQL

表1・・・商品ID 表2・・・商品ID、賞味期限、価格ID 表3・・・価格ID、商品価格 このような表があるとします。 ここで、商品価格ごとにもっとも賞味期限の古い商品IDを表示させてい場合、どのようなSQL文を書けばよいでしょうか? また、オラクル8でお願いします。 例題となるテーブルとレコードが紛らわしいですが、よろしくお願いいたします。

みんなの回答

  • SUPER-NEO
  • ベストアンサー率38% (706/1857)
回答No.3

質問にあるようなテーブルであれば、3表も結合する必要は 無いと思いますが、何か3表使わなければならない理由でも あるのでしょうか? 質問者さんとしても何も考えてはおられないと思いますが、 どういった SQL をお考えでしょうか? SELECT   T.商品ID FROM   (    SELECT     T2.商品ID,     MIN(T2.賞味期限),     T2.価格ID    FROM     表2 T2 GROUP BY     T2.商品ID,     T2.価格ID   ) T;

回答No.2

R8.1.xでなく、R8.0.xですか... select T2.価格ID from T2,T3 where T2.価格ID=T3.価格ID and (T3.商品価格,T2.賞味期限) in ( select T3.商品価格,min(T2.賞味期限) from T2,T3 where T2.価格ID=T3.価格ID group by T3.商品価格 ) とか select T2.価格ID from T2,T3 where T2.価格ID=T3.価格ID and not exists ( select 1 from T2 X2,T3 X3 where X2.価格ID=X3.価格ID and X2.価格ID=T2.価格ID and X3.商品価格=T3.商品価格 and X2,賞味期限<T2賞味期限 ) とかで出来るんじゃないですかね。 テストしてないですけど。

回答No.1

「三つのテーブルからの集計」というタイトルですが、この質問内容だと、表1を結合する必要はないのでは? 「表1に商品名があり、商品IDを商品名に変換」なら、3表の結合が必要になりますが。

関連するQ&A