2016-09-15 101 views
1

我有一个如下所示的MySQL表,我想查找完全禁用的人的名字。通过查询SQL查询只查找启用的记录

这是我的表:

+----+----------+---------+ 
| id | name  | enabled | 
+----+----------+---------+ 
| 1 | person 1 |  1 | 
| 2 | person 1 |  0 | 
| 3 | person 2 |  0 | 
| 4 | person 2 |  0 | 
| 5 | person 3 |  1 | 
| 6 | person 3 |  1 | 
+----+----------+---------+ 

(在enabled列代表一个布尔值)

在这种情况下,我只是想找到人2,因为这两个记录被禁用。我不想找到人1,因为人1在第1行中仍处于启用状态,并且人3已完全启用,因此on也应排除。

回答

4

您可以聚集和having条款做到这一点:

select name 
from t 
group by name 
having max(enabled) = 0; 
+0

真棒。我刚刚想出了'select * from p group by name having sum(enabled)= 0'。你的可能会更好。 –

+0

@Erik我真的很喜欢这个解决方案。它正是*你正在寻找的东西。 – Pachonk

+0

@Erik。 。 。对于你的数据来说,两者几乎是等价的。 –

0
SELECT name 
    FROM table 
GROUP BY name 
HAVING MIN(enabled) = 0 AND COUNT(1) = 1;