重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

テーブル名:AAA カラム: 'fname' ,ename
テーブル名:BBB カラム: "id",fcode
テーブル名:CCC カラム : "id",'fname',date

上記三つのテーブルAAA,BBB,CCCにそれぞれカラムがあります。
最終的に
ename fcode date の3カラムを結合した状態でSELECTします。
ただし、条件として
AAAのfname列とCCCのfname列を紐付けし、尚且つ
BBBのid列とCCCのid列を紐付けし、尚且つ
CCCのdate列が2012-10-31以上のものだけをSELECTしたいです。
上記を踏まえて下記二点ご質問致します。

(1)私が考えたSQL文は
select a.ename ,bc.fcode ,bc.date from AAA a ,
(select b.fcode ,c.fname ,c.date from BBB b , CCC c where b.id = c.id and c.date >= '2012-10-31' ) bc
where a.fname = bc.fname ;
です。先にBBBとCCCから紐付けしその結果とAAAを紐付けしています。
このSQL文で間違いがないかどうか判定していただきたく。

(2)もっとスマートな書き方(短く書けるなど)がありましたら、
ご助言いただきたく。

ちなみにデータベースはオラクル仕様です。
宜しくお願い致します。

A 回答 (1件)

きっといいと思います。


唯一気にした方がいい部分としては、日付項目は明示的に日付型に
変換した上で比較してあげましょう。

個人的には必要性がない場合にFROM句内にサブクエリを書くのが
見通しが悪くなって嫌いなので
SELECT
   A.ENAME
   B.FCODE
   C.DATE
FROM AAA A,
   BBB B,
   CCC C
WHERE A.FNAME = B.FNAME
AND  B.ID  = C.ID
AND  C.DATE >= TO_DATE('2012/10/31', 'YYYY/MM/DD')
    • good
    • 0

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

関連するカテゴリからQ&Aを探す