1

このテーブルがあるとします:

    | | ID | id サービス |
    | | 1 | 5 |
    | | 1 | 10 |
    | | 2 | 5 |
    | | 2 | 15 |
    | | 3 | 5 |
    | | 3 | 20 |
    | | 4 | 5 |
    | | 4 | 25 |
    
製品 5 が他の製品 (10、15、20、25) の少なくとも 1 つと共に存在するすべてのクライアント (ID) を選択できるようにしたいと考えています。

クエリとの組み合わせの1つに対してそれを行うことができます:

SELECT ID FROM table WHERE idService IN (5,10) GROUP BY ID HAVING COUNT(DISTINCT idService) = 2

ただし、このクエリに他の条件を追加すると、少なくとも 2 つの製品を持つすべてのクライアントが取得されます。

SELECT ID FROM table WHERE idService IN (5,10) OR idService IN (5,15) OR idService IN (5,20) OR idService IN (5,25) GROUP BY ID HAVING COUNT(DISTINCT idService) = 2

IN 句を変更するか、それらを置き換えて、4 つの有効な組み合わせのいずれかを持つクライアントのみを取得できるかどうか疑問に思っています。

編集:

サブクエリを使用してクエリを機能させることができました。

SELECT ID FROM table WHERE ID IN ( SELECT ID FROM table WHERE idService =5) AND ( idService =10 OR idService =15 OR idService =20 OR idService =25 ) GROUP BY idSPOrder

4

3 に答える 3

1
select Id 
from Table T
where exists (select 1 from Table where Id = T.Id AND idService = 5)
group by Id
having count(*) >= 2
于 2013-09-26T15:23:35.197 に答える
0
select table.id from table, 
(select id from table where idservice != 5 group by id)t 
where idservice = 5 and table.id = t.id
于 2013-09-26T15:27:35.720 に答える