mysql - 在多行上使用多个 IN 子句进行查询

标签 mysql sql

假设我有这张表:

    | ID | idService |
    | 1  |     5     |
    | 1  |     10    |
    | 2  |     5     |
    | 2  |     15    |
    | 3  |     5     |
    | 3  |     20    |
    | 4  |     5     |
    | 4  |     25    |
    
我希望能够选择产品 5 与至少一种其他产品(10、15、20、25)一起出现的所有客户 (ID)。

我可以针对其中一种与查询的组合执行此操作:

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/p>

最佳答案

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/

相关文章:

python - sqlalchemy,从mysql读取并写入内存

php - 检查用户是否在数据库中

mysql - 如何通过数据透视表选择具有一定关系的行?

php - 如何将 Web 应用程序制作为在服务器端 google 驱动器 PHP 中使用应用程序拥有的帐户

php - 在 laravel eloquent 中获取*相关*链接模型而不是原始 SQL

php - 是否应该在 MySQL 中使用/创建尽可能多的索引?

PHP/MySQL 将相同的数据插入到两个表中

MYSQL 使用一个查询的行计数通过比较值来限制一秒钟的结果

sql - Null是否大于任何日期数据类型?

mysql - 如何在 oracle sql 中合并(列)两个 SELECT 语句的输出?