假设我有这张桌子:
|ID | idService服务|
|1 | 5个|
|1 | 10个|
|2 | 5个|
|2 | 15个|
|3 | 5个|
|3 | 20个|
|4 | 5个|
|4 | 25|
我希望能够选择所有的客户(I d),其中产品5与至少一个其他产品(10,15,20,25)存在。
我可以通过查询对其中一个组合执行此操作:
SELECT ID FROM table WHERE idService IN (5,10) GROUP BY ID HAVING COUNT(DISTINCT idService) = 2
但是,如果我在这个查询中添加其他条件,我将得到至少有两个产品的所有客户机,不管是5加10还是10加20。
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子句或替换它们,以便仅使用四个有效组合中的一个来获取客户机。
编辑:
我已经能够使用子查询使查询工作。
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

最佳答案

select distinct ID from table t1
where (select count(*) from table where ID = t1.ID group by ID) >=2
and (select count(*) from table where Idservice = 5 and ID = t1.ID group by ID) > 0

关于mysql - 在多行上使用多个IN子句查询,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19031778/

10-13 00:54