- ベストアンサー
副問い合わせ?
次のような2つのテーブルA、Bがあるとします。 テーブルA ID, FLG, DATE 01, Y, 2006-10-10 02, N, 2006-11-11 03, N, 2006-12-12 テーブルB ID, DATE 01, 2006-10-10 02, 2006-11-11 DATEが '2006-10-10' 以降でテーブルA.FLGが 'N'、かつ、テーブルBに存在するレコードを検索するにはどうすればよいでしょうか?
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
テーブルAのIDとテーブルBのIDは同一のものを指していると考えていいのでしょうか。 もしそうであれば、JOINが使用できます。 SELECT * FROM テーブルA JOIN テーブルB USING (ID) WHERE テーブルA.DATE >= '2006-10-10' AND テーブルA.FLG='N' これで希望のデータが取り出せないでしょうか。 副問合せを使用するなら SELECT * FROM テーブルB WHERE ID IN (SELECT ID FROM テーブルA WHERE FLG='N' AND DATE >= '2006-10-10' で出せそうな気がします。
その他の回答 (2)
申し訳ありません。 思いっきりミスをしていました。 ------------------------------------------------------------ -- テーブルtable1のid、テーブルtable1のflg、テーブルtable1のdateを抽出。 select table1.id, table1.flg, table1.date -- テーブルtable1、及びテーブルtable2を使用します。 from table1, table2 -- 抽出の条件として、table1のidとtable2のidが同じ where table1.id = table2.id -- かつ、table1のflgがN and table1.flg = 'N' -- かつ、table1のdateが2006-10-10以降を指定します。 and table1.date >= '2006-10-10'; ------------------------------------------------------------ こちらが正しいです。
こんばんは。 SQL勉強中なので、実際に作ってみました。 ------------------------------------------------------------ -- テーブルtable1のid、テーブルtable1のflg、テーブルtable1のを抽出。 dateselect table1.id, table1.flg, table1.date -- テーブルtable1、及びテーブルtable2を使用します。 from table1, table2 -- 抽出の条件として、table1のidとtable2のidが同じ where table1.id = table2.id -- かつ、table1のflgがN and table1.flg = 'N' -- かつ、table1のdateが2006-10-10以降を指定します。 and table1.date >= '2006-10-10'; ------------------------------------------------------------ 上記で抽出が可能です。 今回は副問い合わせは必要ないですね。 (強いて言えば、今後のために結合を知っておきたい) 今回のSQL文については、1行ずつコメントを書いていきましたので、 参考にしてください。 「副問い合わせ」については、参考URLを参考にしてください。 ※1 id、flgについてはCHAR型、dateについてはDATE型で書きました。 型が違う場合は書き換えてください。 ※2 SQL文をすべて小文字で書きましたが、SQLでは 'Y'や'N'のような「リテラル」以外は大文字、小文字を気にしないため、 すべて小文字で書きました。