我不确定如何标题,但这就是我想要做的。我有一个表,其中id可以有多个条目
id | number
___________
1 | 90
1 | 88
2 | 88
3 | 88
我想要一个返回所有不包含数字90的id的查询,因此在这个例子中只有2和3。我已经尝试了下面的内容,但它仍然返回1的id,因为它也有88个。
SELECT DISTINCT id FROM table WHERE number NOT IN (90)
答案 0 :(得分:3)
获得结果的一种方法是使用NOT EXISTS
。基本上它的作用是它在内部查询中得到ID
所有90
,而NOT EXISTS
只显示内部查询中没有的所有ID
。
SELECT A.*
FROM TableName a
WHERE NOT EXISTS (SELECT NULL
FROM TableName B
WHERE a.ID = b.ID
AND b.number = 90)
这里是Demo。
另一种方法是使用LEFT JOIN
产生与上面相同的结果。
SELECT a.*
FROM TableName a
LEFT JOIN TableName b
ON a.ID = b.ID
AND b.number = 90
WHERE b.id IS NULL
这里是Demo。
答案 1 :(得分:1)
您可以使用子查询:
SELECT id
FROM table
WHERE id NOT IN (SELECT id FROM table WHERE number = 90)
答案 2 :(得分:0)
您可以使用如下所示的聚合来获得更好的性能:
SELECT ID
FROM YourTable
GROUP BY ID
HAVING NOT INSTR(GROUP_CONCAT(`number`),'90');