我不确定如何标题,但这是我想要做的。我有一个表,其中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)
获得结果的一种方法是使用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。
您可以使用子查询:
SELECT id
FROM table
WHERE id NOT IN (SELECT id FROM table WHERE number = 90)
您可以使用如下所示的聚合来获得更好的性能:
SELECT ID
FROM YourTable
GROUP BY ID
HAVING NOT INSTR(GROUP_CONCAT(`number`),'90');