我正在尝试查找一个 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)
答案 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;