- ベストアンサー
相互データがあるの情報を取りたい
このようなデータ構造で、それぞれデータが入っています。 ----------------- column1 | column2 ----------------- A | B B | A B | C C | D ----------------- column1のAを検索し、AがBとお互いにデータが入っているのを確認するSQLはどのような形になりますか。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
副問い合わせ という手法を使います。 若干質問の例とは変更して、 [TABLE_HOGE] ------------- c1 c2 ------------- A B D C B A C B ------------- というテーブルの中から 『c1が'B'でかつ相互データが存在するもの』 を検索します。 ゴールは [TABLE_HOGE] ------------- c1 c2 ------------- A B ←目的レコードの相互データ(c1とc2が目的のレコードとは逆) D C B A ←目的のレコード C B ------------- だと思います。 /* ここSQL:1 */ select * from TABLE_HOGE where c1 like 'B' and c2 in ( /* ここから SQL:2 */ select c1 from TABLE_HOGE where c2 like 'B' /* SQL:2 ここまで*/ ); SQL:2を単体で実行すると『c2が'B'であるデータのc1の値』を取得します。 結果は、元のテーブルの1行目(=A),4行目(=C)が返ってきますよね。 この取得した'A'と'C'を使って、SQL:1では「in」という方法を使って検索を行います。 「in (a,b,c,......)」は、「aまたはbまたはcまたは…にマッチする」という意味になります。 したがって、SQL:1をSQL:2の取得結果を元に書き直すと select * from HOGE_TABLE where c1 like 'B' /* c1が'B'で */ and ( c2 like 'A' or c2 like 'C' ); となり、2行目の[ B A ]行が返されます。
お礼
ありがとうございます。欲しい情報が取れそうです!!