获取mysql表中不存在的值

Pav*_* K. 3 mysql sql

我有一组值(键),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.

mvp*_*mvp 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)

  • @OMGPonies不是我的阅读 - 给定`IN()`列表`IN(1,2,3,4,5)`,OP希望该列表中的值不存在,而不是不存在的行存在于列表中(`NOT IN()`将返回). (4认同)