• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:[SQL]同テーブルのデータ取得について)

[SQL]同テーブルのデータ取得について

このQ&Aのポイント
  • 質問番号1に回答例1が入力され、かつ質問番号3に回答例3が入力されているIDをテストテーブルから取得する方法について教えてください。
  • SQLを使用して、テストテーブルから質問番号1に回答例1が入力され、かつ質問番号3に回答例3が入力されているIDを取得する方法を教えてください。
  • テストテーブルから、質問番号1に回答例1が入力され、かつ質問番号3に回答例3が入力されているIDを取得するにはどうすればいいですか。

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

  • ベストアンサー
  • jamshid6
  • ベストアンサー率88% (591/669)
回答No.1

SQLは基本条件に合致した行を抽出するものですので、今回のように別の行をAND条件で括るのは、シンプルにはできません。 どれでもできるはずなので、理解しやすいものをお使いください。 1) ID別にデータを1行にしてから処理する SELECT ID FROM (SELECT ID, MAX(CASE WHEN 質問番号=1 THEN 回答 END) 回答1, MAX(CASE WHEN 質問番号=2 THEN 回答 END) 回答2, MAX(CASE WHEN 質問番号=3 THEN 回答 END) 回答3 FROM TEST_TABLE GROUP BY ID) tmp WHERE 回答1='回答例1' AND 回答3='回答例3' 2)上記の変型 SELECT ID FROM TEST_TABLE GROUP BY ID HAVING MAX(CASE WHEN 質問番号=1 THEN 回答 END)='回答例1' AND MAX(CASE WHEN 質問番号=3 THEN 回答 END)='回答例3' 3)ID/質問番号が主キーであるとして、合致した行の数で抽出 SELECT ID FROM TEST_TABLE WHERE (質問番号=1 AND 回答='回答例1') OR (質問番号=3 AND 回答='回答例3') GROUP BY ID HAVING COUNT(*)=2 4) サブクエリを使う SELECT DISTINCT ID FROM TEST_TABLE WHERE ID IN (SELECT ID FROM TEST_TABLE WHERE 質問番号=1 AND 回答='回答例1') AND ID IN (SELECT ID FROM TEST_TABLE WHERE 質問番号=3 AND 回答='回答例3')

Hakurinko
質問者

お礼

確かにすべてできそうです。 (さっそく月曜日に確認いたします) このような方法があるとは、ただ感嘆するばかりです。 大変お世話になりました。 ありがとうございました。

関連するQ&A