我有一组值(键),1,2,3,4,5和下表:
id key
------
1 2
2 8
3 4
Run Code Online (Sandbox Code Playgroud)
如果我需要检查哪个给定的键在db中,我使用:
SELECT *
FROM mytable
WHERE key IN (1,2,3,4,5)
Run Code Online (Sandbox Code Playgroud)
所以我会得到带有键2和4的行.
是否有某种mysql方法可以找出哪些给定键不在db中?所以在这种情况下我想得到1,3,5.
使用您的密钥创建临时表:
CREATE TEMPORARY TABLE mykeys (`key` INT);
INSERT INTO mykeys VALUES (1),(2),(3),(4),(5);
Run Code Online (Sandbox Code Playgroud)
然后使用NOT IN:
SELECT `key`
FROM mykeys
WHERE `key` NOT IN (SELECT `key` FROM mytable)
Run Code Online (Sandbox Code Playgroud)
最后,如果您必须,请删除您的TEMP表:
DROP TABLE mykeys
Run Code Online (Sandbox Code Playgroud)
编辑:添加SQLFiddle.
如果您正在使用支持EXCEPT运算符的 PostgreSQL ,并且还VALUES可以使用语句从值列表创建行集,则可以使用另一种更简单的方法来执行此操作而不使用临时表(SQLFiddle):
VALUES (1),(2),(3),(4),(5)
EXCEPT
SELECT key FROM mytable
Run Code Online (Sandbox Code Playgroud)