- 締切済み
3つのテーブルからの抽出SQL
表1・・・商品ID 表2・・・商品ID、賞味期限、価格ID 表3・・・価格ID、商品価格 このような表があるとします。 ここで、商品価格ごとにもっとも賞味期限の古い商品IDを表示させてい場合、どのようなSQL文を書けばよいでしょうか? また、オラクル8でお願いします。 例題となるテーブルとレコードが紛らわしいですが、よろしくお願いいたします。
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- SUPER-NEO
- ベストアンサー率38% (706/1857)
質問にあるようなテーブルであれば、3表も結合する必要は 無いと思いますが、何か3表使わなければならない理由でも あるのでしょうか? 質問者さんとしても何も考えてはおられないと思いますが、 どういった SQL をお考えでしょうか? SELECT T.商品ID FROM ( SELECT T2.商品ID, MIN(T2.賞味期限), T2.価格ID FROM 表2 T2 GROUP BY T2.商品ID, T2.価格ID ) T;
- k_o_r_o_c_h_a_n
- ベストアンサー率55% (526/942)
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賞味期限 ) とかで出来るんじゃないですかね。 テストしてないですけど。
- chukenkenkou
- ベストアンサー率43% (833/1926)
「三つのテーブルからの集計」というタイトルですが、この質問内容だと、表1を結合する必要はないのでは? 「表1に商品名があり、商品IDを商品名に変換」なら、3表の結合が必要になりますが。