重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

このようなデータ構造で、それぞれデータが入っています。

-----------------
column1 | column2
-----------------
A | B
B | A
B | C
C | D
-----------------

column1のAを検索し、AがBとお互いにデータが入っているのを確認するSQLはどのような形になりますか。

A 回答 (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'
  andc2 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 ]行が返されます。
    • good
    • 0
この回答へのお礼

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

お礼日時:2009/08/29 23:16

SELECT * FROM テーブル名


WHERE column1='A' and column2 !=''

これでいいのかな?
column1にAが入っていてcolumn2が空白ではないレコードを抽出しているんだけど・・
    • good
    • 0

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

この回答への補足

この場合、
A,B
のデータが取れればと思っています。

逆にBを検索した場合も
B,Aという具合です。

補足日時:2009/08/24 13:47
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す