选择带有 GROUP 的行,方法是排除带标志的组 ( MySQL)



有3列的表格:

id    name    flag
1       A       1 
2       A       0
3       A       0
4       B       0
5       B       0
6       C       0
7       D       1

我想选择所有没有标志 = 1 的组

预期成果:

name
B
C

这是行不通的,因为(正确(包括列表一中的所有组

SELECT name
FROM test 
WHERE flag <> '1'
GROUP BY name

聚合是执行此操作的一种方法,但您需要一个HAVING子句来断言匹配组没有标志 = 1:

SELECT name
FROM test
GROUP BY name
HAVING SUM(flag = 1) = 0;

演示

您还可以使用具有存在逻辑的子查询:

SELECT t1.name
FROM test t1
WHERE NOT EXISTS (SELECT 1 FROM test t2 WHERE t2.name = t1.name AND t2.flag = 1);

您可以使用以下查询来获取所需的输出。

SELECT `name` 
FROM `test` 
WHERE `name` <> ALL ( SELECT `name` FROM `test` WHERE `flag` = 1 )
GROUP BY `name`;

只需使用SELECT DISTINCT

SELECT DISTINCT `name`
FROM `test`
WHERE `name` NOT IN (SELECT DISTINCT `name` FROM `test` WHERE `flag` = 1);