我有一组值(键),1,2,3,4,5和下表:
id key
------
1 2
2 8
3 4
如果我需要检查db中的哪个给定键,我使用:
SELECT *
FROM mytable
WHERE key IN (1,2,3,4,5)
所以我得到带有键2和4的行。
是否有某种mysql方法可以找出哪些给定键不在db中?所以在这种情况下,我想得到1,3,5。
答案 0 :(得分:5)
使用您的密钥创建临时表:
CREATE TEMPORARY TABLE mykeys (`key` INT);
INSERT INTO mykeys VALUES (1),(2),(3),(4),(5);
然后使用NOT IN:
SELECT `key`
FROM mykeys
WHERE `key` NOT IN (SELECT `key` FROM mytable)
最后,如果必须,请删除TEMP表:
DROP TABLE mykeys
编辑:添加了SQLFiddle。
如果您正在使用支持EXCEPT
operator的PostgreSQL,并且还可以使用VALUES
语句从值列表创建行集,则可以使用另一种更简单的方法来执行此操作而无需临时表({ {3}}):
VALUES (1),(2),(3),(4),(5)
EXCEPT
SELECT key FROM mytable
答案 1 :(得分:1)
虽然这是一个非常混乱的解决方案,但确实有效:
select v.val from
(
select 1 as val
union
select 2 as val
union
select 3 as val
union
select 4 as val
union
select 5 as val
) v
WHERE
v.val NOT IN(
SELECT `key`
FROM mytable
WHERE key IN (1,2,3,4,5)
);
答案 2 :(得分:1)
这有点笨重,但确实有效:
select sq.val
from mytable t
right join (select 1 as val
union
select 2
union
select 3
union
select 4
union
select 5 ) as sq
on t.col = sq.val
where t.id is null;