• ベストアンサー

相互データがあるの情報を取りたい

このようなデータ構造で、それぞれデータが入っています。 ----------------- column1 | column2 ----------------- A | B B | A B | C C | D ----------------- column1のAを検索し、AがBとお互いにデータが入っているのを確認するSQLはどのような形になりますか。

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

  • ベストアンサー
回答No.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 ]行が返されます。

taskeai
質問者

お礼

ありがとうございます。欲しい情報が取れそうです!!

その他の回答 (2)

  • calltella
  • ベストアンサー率49% (317/635)
回答No.2

SELECT * FROM テーブル名 WHERE column1='A' and column2 !='' これでいいのかな? column1にAが入っていてcolumn2が空白ではないレコードを抽出しているんだけど・・

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

具体的にはこの場合結果はどういうものをほしいのでしょうか?

taskeai
質問者

補足

この場合、 A,B のデータが取れればと思っています。 逆にBを検索した場合も B,Aという具合です。

関連するQ&A