小编典典

获取mysql表中不存在的值

sql

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


阅读 166

收藏
2021-04-14

共1个答案

小编典典

用您的密钥创建临时表:

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):

VALUES (1),(2),(3),(4),(5)
EXCEPT
SELECT key FROM mytable
2021-04-14