假设我有一个id列表,例如(1,3,9,2,4,86),以及一个具有列id的表。我想找出我的列表中没有匹配行的所有数字。
例如,如果mysql表是这样的:
id letter
1 a
2 b
3 c
4 d
5 e
6 f
7 g我有一个列表(1, 3, 9, 2, 4, 86),我想要一个返回(9, 86)的查询。
我唯一能想到的就是建立一个非常大的虚拟表格,比如:
select 1 as n union select 3 as n union select 9 as n union ....然后我就可以联合起来反对了。有没有更好的方法?我希望能够在mysql中完成这一切。顺便说一句(尽管我并不认为它是相关的),我的表大约有10,000行,而我使用的列表中有大约100个数字。
发布于 2013-04-11 21:50:09
创建一个包含it的表,这样您就可以轻松地完成它。请在此处查看演示
SELECT
S.id,
'' AS `letter`
FROM sequence S
WHERE S.id NOT IN(SELECT
id
FROM mytable)
SQL Fiddle Demo
发布于 2013-04-11 22:49:42
假设您在@Luv的答案中使用临时表或UNION方法,请考虑将NOT IN替换为外部连接,因为它可能会执行得更好(当然,使用您的实际环境和数据进行测试):
SELECT num
FROM t
LEFT OUTER JOIN letter_table
ON t.num = letter_table.id
WHERE letter_table.id IS NULL;如果使用UNION方法,请用FROM ([big UNION here]) t替换FROM t。
https://stackoverflow.com/questions/15950107
复制相似问题