2016-09-15 119 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;