首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >获取表中不存在的in列表

获取表中不存在的in列表
EN

Stack Overflow用户
提问于 2013-04-11 21:30:10
回答 2查看 4.2K关注 0票数 2

假设我有一个id列表,例如(1,3,9,2,4,86),以及一个具有列id的表。我想找出我的列表中没有匹配行的所有数字。

例如,如果mysql表是这样的:

代码语言:javascript
复制
id  letter
1   a
2   b
3   c
4   d
5   e
6   f
7   g

我有一个列表(1, 3, 9, 2, 4, 86),我想要一个返回(9, 86)的查询。

我唯一能想到的就是建立一个非常大的虚拟表格,比如:

代码语言:javascript
复制
select 1 as n union select 3 as n union select 9 as n union ....

然后我就可以联合起来反对了。有没有更好的方法?我希望能够在mysql中完成这一切。顺便说一句(尽管我并不认为它是相关的),我的表大约有10,000行,而我使用的列表中有大约100个数字。

EN

回答 2

Stack Overflow用户

发布于 2013-04-11 21:50:09

创建一个包含it的表,这样您就可以轻松地完成它。请在此处查看演示

代码语言:javascript
复制
SELECT
  S.id,
  ''   AS `letter`
FROM sequence S
WHERE S.id NOT IN(SELECT
                    id
                  FROM mytable)

SQL Fiddle Demo

票数 0
EN

Stack Overflow用户

发布于 2013-04-11 22:49:42

假设您在@Luv的答案中使用临时表或UNION方法,请考虑将NOT IN替换为外部连接,因为它可能会执行得更好(当然,使用您的实际环境和数据进行测试):

代码语言:javascript
复制
SELECT num
FROM t
    LEFT OUTER JOIN letter_table
        ON t.num = letter_table.id
WHERE letter_table.id IS NULL;

如果使用UNION方法,请用FROM ([big UNION here]) t替换FROM t

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15950107

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档