我有一组值(键),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的方式来找出哪些给定的键不在数据库中?因此,在这种情况下,我想得到1,3,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。
如果您正在使用支持EXCEPToperator的PostgreSQL ,并且还VALUES可以使用语句从值列表创建行集,则可以使用另一种更简单的方法来执行此操作,而无需使用临时表(SQLFiddle):
EXCEPT
VALUES
VALUES (1),(2),(3),(4),(5) EXCEPT SELECT key FROM mytable