- - PR -
SQL文について質問です
1
投稿者 | 投稿内容 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2008-02-18 05:13
いつもお世話になっております。
VIEWを使用したSELECT文について質問させてください。 以下が現在のテーブル二つです。 T_STAFFテーブル STAFF_ID T_DATA STAFF_ID TARGET_DT OPE_ID 取得したいデータ条件は以下です。 T_STAFFのSTAFF_IDの中から T_DATAのTARGET_DT=20080101、OPE_ID=00000001のSTAFF_IDを省いたSTAFF_IDを取得したいです。 現在のVIEWは以下です。 CREATE OR REPLACE VIEW V_STAFF AS SELECT A.STAFF_ID AS STAFF_ID FROM T_STAFF A, T_DATA B WHERE A.STAFF_ID = B.STAFF_ID AND NOT EXISTS (SELECT * FROM T_DATA WHERE A.STAFF_ID = T_DATA.STAFF_ID AND TARGET_DT = 20080101 AND OPE_ID = 00000001) 上記のVIEWで希望のデータを取得できるのですが、 TARGET_DT = 20080101 と、 OPE_ID = 00000001 は、JSPの画面から渡したいです。 VIEWを CREATE OR REPLACE VIEW V_STAFF AS SELECT A.STAFF_ID AS STAFF_ID FROM T_STAFF A, T_DATA B WHERE A.STAFF_ID = B.STAFF_ID に変更し、JAVAから "AND NOT EXISTS (SELECT * FROM T_DATA A, T_STAFF B WHERE B.STAFF_ID = A.STAFF_ID AND A.TARGET_DT = '" + target_dt + "' AND A.OPE_ID = '" + ope_id + "')" を追記して実行しました。 target_dtとope_idはJAVAの変数です。それぞれ20080101と00000001が代入されています。 このSELECT文を実行すると、 T_DATAテーブルのTARGET_DTが20080101以外で登録されているSTAFF_IDも取得出来なくなってしまいました。 恐らくJAVAから追記している条件文が間違えていると思うのですが、 どこが悪いのでしょうか? 分かりづらい文章で申し訳ありません。 よろしくお願い致します。 | ||||||||||||
|
投稿日時: 2008-02-18 07:11
質問する場合は、RDBMS名とバージョンを明記してください。
今回は大きな違いはないかも知れませんが、DDLはRDBMSによる方言が多い箇所 です。 表のデータは、1:1なのかなど不明点が多いので、質問で書かれている範囲の情報で 分かる部分のみ回答します。 まず、NOT EXISTSの使い方が正しくありません。RDBMSにより「相関サブクエリ」と 呼んだり、「外への参照」といった呼び方をする場合もありますが、サブクエリ内と 外側のクエリの関連付けがないと、EXISTSは結果を返しません。
また、質問内容を見る限り、
というジョインは必要ありません。 質問内容通りなら、次のようなSQLになると思います。
|
1