获取mysql表中不存在的值 [英] getting values which dont exist in mysql table

查看:261
本文介绍了获取mysql表中不存在的值的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

解决方案

使用密钥创建临时表:

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运算符的PostgreSQL,并且VALUES语句可用于从值列表中创建行集,还有另一种更简便的方法来执行此操作,而无需使用临时表( 解决方案

Create temporary table with your keys:

CREATE TEMPORARY TABLE mykeys (`key` INT);
INSERT INTO mykeys VALUES (1),(2),(3),(4),(5);

Then use NOT IN:

SELECT `key`
FROM mykeys
WHERE `key` NOT IN (SELECT `key` FROM mytable)

Finally, drop your TEMP table if you must:

DROP TABLE mykeys

EDIT: Added SQLFiddle.


If you are using PostgreSQL which supports EXCEPT operator, and also VALUES statement can be used to create row set from list of values, there is another, easier way to do this without temporary tables (SQLFiddle):

VALUES (1),(2),(3),(4),(5)
EXCEPT
SELECT key FROM mytable

这篇关于获取mysql表中不存在的值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆