プロが教えるわが家の防犯対策術!

下記のテーブルがあったとして、
field2にグループAに該当する値と、グループBに該当する値が共に1つずつ入っている
field1の値を抽出したいと思いました。
下記の場合ですと、その条件を満たす1, 3, 4, 6を抽出したいと思います。

グループA:1, 2, 3
グループB:101, 102, 103

―――――――――
|field1|field2
―――――――――
|1   |1  
|1   |10
|1   |101
|2   |1  
|2   |15
|2   |104
|3   |2  
|3   |18
|3   |101
|4   |2  
|4   |17
|4   |103
|5   |3  
|5   |15
|5   |100
|6   |3  
|6   |18
|6   |103
―――――――――

使用バージョンは7.4.19です。
よろしくお願いします。

A 回答 (1件)

以下は一例です。



SELECT field1 FROM T
GROUP BY field1
HAVING MAX((CASE WHEN field2 in (1,2,3) THEN 1 ELSE 0 END)
|(CASE WHEN field2 in (101,102,103) THEN 2 ELSE 0 END))=3

その他、サブクエリでAグループ、Bグループを作り、INNER JOINする
方法などが考えられます。
    • good
    • 0
この回答へのお礼

ありがとうございます。
教えていただいた記述そのままでは「レコードが見つかりません。」と表示されてしまいましたが、下記のように修正した所、意図した動作をしているようでした(テーブル名はTでは無く、main_tableにさせていただきました)。

SELECT field1
FROM main_table
GROUP BY field1
HAVING MAX(CASE WHEN field2 in (1,2,3) THEN 1 ELSE 0 END)>0
And MAX(CASE WHEN field2 in (101,102,103) THEN 2 ELSE 0 END)>0

以上、よろしくお願いします。

お礼日時:2008/11/13 18:22

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

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