• ベストアンサー

SQLの勉強中の者です。

SQLの勉強中の者です。 調べてもよく分からなかったので、分かる方、ご教授いただけると嬉しいです。 ●DBテーブル情報  A B C ---------------  1 1 1  1 2 1  1 2 2 ●取得条件 「A」=1 かつ「B」=1or2 であり、かつ 「B」=1の取得データと「B」=2の取得データで「C」が共通していること 上記例で言えば、テーブルの1、2行目を取得したいのですが… どんなSQL文を使えば良いのか、ヒントだけでも良いのでいただけないでしょうか。 どうぞ宜しくお願いします。

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

  • ベストアンサー
  • utakataXEX
  • ベストアンサー率69% (711/1018)
回答No.1

どのRDBMSをお使いかわかりませんが、以下の記述で大抵は行けると思います。 一応、2,3のRDBMSで試しました。 (エイリアスの記述はRDBMSによって癖があるので注意) select T1.* from テーブル1 as T1 where exists (select 'X' from テーブル1 as T2 where T2.A = T1.A and T2.B = '1' and T2.B in ('1', '2') and T2.B <> T1.B and T2.C = T1.C ) ご質問の要件のような「同じテーブル内でレコードをまたいだ条件がある」場合には、「自己結合」と言って、同じ「テーブル1」が2回登場するようなSQLになります。 今回の場合は、値の取得は1テーブルでよく、「条件に合致するものがあるか存在する事を確認したい」だけなので、EXISTS を使用します。 この様に、主たるテーブル(この場合はT1)と副問合せ側のテーブル(T2)を紐付ける事を「相関副問合せ」と言います。 [存在する事を確認する条件] (1)「A」=1 (2)「B」=1or2 (3)「B」=1の取得データと「B」=2の取得データで「C」が共通していること 上記を相関副問合せに当てはめて言い換えるとこうなります。 ↓ 「(1)(2)の条件を共通して満たすレコードで「自分以外(この場合はBが異なるもの)」で更にCは等しい」

miton_1
質問者

お礼

うわぁなるほどー! 同じテーブルを2回登場させるという考え方、まったく思いつかなかったです! 勉強になりました。ありがとうございました。

関連するQ&A