Mysql - 如何检索没有特定属性的所有项目?

问题描述:

我有一个表,如下Mysql - 如何检索没有特定属性的所有项目?

id  key  value section 
 
----------------------------------- 
 
CT1 | A | 25 | M-2 
 
CT1 | B | 35 | M-1 
 
CT2 | A | 70 | M-1 
 
CT2 | C | 30 | M-2 
 
CT2 | D | 20 | M-3 
 
CT3 | B | 40 | M-2 
 
CT3 | A | 15 | M-1 
 
CT4 | B | 25 | M-1 
 
CT4 | D | 25 | M-2

我需要一种方法来返回不具有某些关键的所有ID。例如:

是不具有'd' IDS: CT1,CT3,

是否有可能来从一个MySQL查询这样的结果?我也搜索了以前的问题。无法找到任何关闭。

您可以使用一个HAVING条款分组:

SELECT id 
FROM mytable 
GROUP BY id  
HAVING COUNT(CASE WHEN key = 'D' THEN 1 END) = 0  
+0

'COUNT(键= 'd')= 0'声音更轻 – Xenos

+0

@Xenos是不会工作 –

+1

@NeverBackDown行动,对不起,我的意思'SUM(keys ='D')= 0'因为是的,'COUNT(keys ='D')'会失败,因为COUNT'counts为“非空值”http://dev.mysql.com/doc/ refman/5.5/en/group-by-functions.html#function_count – Xenos

SELECT ID FROM YOURTABLE WHERE KEY NOT IN (选择YOURTABLE KEY)

您可以使用WHERE NOT子句。看看这个例子中,当值不是25

select * from table where not value=25 

使用

SELECT id FROM table GROUP BY id HAVING count(key in ('D'))=0 

你可以改变或者一些元素添加到列表中排除一个或多个ID这一切抓起。

+1

这将返回'CT1',因为它的键是'A',它不是'D' – Xenos

的NOT IN的方法必须是这样的:

SELECT id 
FROM mytable 
WHERE id NOT IN 
(SELECT id 
FROM mytable 
WHERE key = 'D')