MySQL查询仅当其他行具有相同的列值时才检索行

时间:2021-07-15 03:48:43

标签: mysql sql

我正在尝试查找一个 MySQL 查询,该查询仅在 2 列与共享同一组的其他行具有相同值时才会检索行。具体来说,如果同一组的多行的status = 'S'且active = 1,则只返回其中一行的名称,否则不返回名称。

示例数据库

id         name       status   active   group
-----      ------     ------   ------   -----
1          Alpha        S         1      A
2          Bravo        S         0      A
3          Charlie      S         1      B
4          Delta        F         1      B
5          Echo         S         1      C
6          Foxtrot      S         1      C 
7          Golf         S         1      C

预期结果

name     
------  
Echo/FoxTrot/Golf (Either one is fine)    
   

2 个答案:

答案 0 :(得分:1)

子查询将返回状态为“S”以外的值的所有组,或者为活动的值为 1。 然后只查询不在此条件下的组。 由于您不介意返回哪些名称,您可以使用 MIN 函数。

SELECT MIN(name) 
FROM table
WHERE group NOT IN (SELECT DISTINCT group FROM table WHERE (status != 'S' OR active != 1))
GROUP BY group

另一种使用 HAVING 而不是子查询的解决方案:

SELECT MIN(name) 
FROM table
GROUP BY group
HAVING SUM(CASE WHEN STATUS != 'S' OR ACTIVE != 1 THEN 1 ELSE 0 END) = 0

答案 1 :(得分:0)

如果您不介意将所有名称放在一起,则可以通过一个简单的查询来完成。您将看到逗号分隔的名称。

SELECT GROUP_CONCAT(name)
FROM Table
WHERE active = 1
GROUP BY group
HAVING COUNT(name) > 1;
相关问题