• ベストアンサー

副問い合わせ?

次のような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に存在するレコードを検索するにはどうすればよいでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • 1E-9
  • ベストアンサー率51% (22/43)
回答No.1

テーブル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)

noname#23580
noname#23580
回答No.3

申し訳ありません。 思いっきりミスをしていました。 ------------------------------------------------------------ -- テーブル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'; ------------------------------------------------------------ こちらが正しいです。

noname#23580
noname#23580
回答No.2

こんばんは。 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'のような「リテラル」以外は大文字、小文字を気にしないため、    すべて小文字で書きました。

参考URL:
http://www.atmarkit.co.jp/fnetwork/rensai/sql08/sql1.html

関連するQ&A