查询:
select id from users where id in (1,2,3,4,5)
如果users表包含ids 1、2、3,这将返回1、2和3。我希望查询返回4和5。换句话说,我不希望查询返回表中存在的任何行,我希望为其提供一个数字列表,并从该列表中获取表中未出现的值。
(更新以澄清以下几个不适用的答案)
发布于 2012-04-04 22:50:29
给定的数字是一个固定的列表。我能想到的最快的方法是有一个测试表,填充这些数字,然后做
未经测试的select语句-但您将遵循princpal。
select test.number
from test
left join
users
on
test.number = users.id
where test.number <> users.id
然后,您将获得没有匹配user.id的所有数字,因此可以填充空洞。
发布于 2014-11-21 11:26:59
如果你不想(显式地)使用临时表,这是可行的:
SELECT id FROM (
(SELECT 1 AS id) UNION ALL
(SELECT 2 AS id) UNION ALL
(SELECT 3 AS id) UNION ALL
(SELECT 4 AS id) UNION ALL
(SELECT 5 AS id)
) AS list
LEFT JOIN users USING (id)
WHERE users.id IS NULL
然而,它非常丑陋,非常长,如果ID列表很长,我怀疑它会如何执行。
发布于 2013-04-20 00:22:41
也有同样的需求,并基于BugFinder在会话中使用临时表的答案构建。通过这种方式,它将在我完成查询后自动销毁,因此我不必处理房屋清理,因为我将经常运行这种类型的查询。
创建临时表:
CREATE TEMPORARY TABLE tmp_table (id INT UNSIGNED);
使用要检查的值填充tmp_table:
INSERT INTO tmp_table (id) values (1),(2),(3),(4),(5);
创建并填充表后,像任何常规表一样运行查询:
SELECT tmp_table.id
FROM tmp_table
LEFT JOIN users u
ON tmp_table.id = u.id
WHERE u.id IS NULL;
https://stackoverflow.com/questions/10013475
复制相似问题