比较两个 SQL 表并返回缺失的 id?

Posted

技术标签:

【中文标题】比较两个 SQL 表并返回缺失的 id?【英文标题】:Compare two SQL tables and return missing ids? 【发布时间】:2011-12-21 07:54:40 【问题描述】:

我有两个简单的表:(这里只有“id”列)

表1:

id
1
2
3
4

表2:

id
2
4

sql 查询应该比较两个表中是否缺少 table2 中的“id”并返回: 1,3

有什么想法吗? :) 泰

【问题讨论】:

到目前为止,所有的答案都只显示了 table1 中的哪些 id 在 table2 中丢失了。您是否需要一个查询来返回 table2 中列 1 中缺少的所有查询? 嗨,保罗,不,我需要的只有一种方法。 关键字是EXCEPTmysql 不支持此操作,但在搜索中使用它会返回大量用于工作和其他方法的结果。 (这个问题时不时出现。) 【参考方案1】:

有几种方法可以给这只猫剥皮:

SELECT    table1.ID
FROM      table1
WHERE     table1.ID NOT IN(SELECT table2.ID FROM table2)

或者你可以使用左外连接:

SELECT          table1.ID
FROM            table1
LEFT OUTER JOIN table2 ON table1.ID = table2.ID
WHERE           table2.ID IS NULL

【讨论】:

我建议您在第一个查询中使用表名前缀来阐明您所指的 ID 字段,如果只是因为如果您稍后扩展它会变得非常混乱。跨度> 【参考方案2】:
select t1.*
from table1 t1
left outer join table2 t2 on t1.id = t2.id
where t2.id is null

【讨论】:

@Raihan 因为对于给定的 T1,LEFT OUTER 可能会从 T2 加入“无行”(这是这种方法的关键)。缺失的行是......缺失的行:-)【参考方案3】:

试试这个:

SELECT    table1.id
FROM      table1
WHERE     table1.id NOT IN(SELECT table2.id FROM table2)

【讨论】:

以上是关于比较两个 SQL 表并返回缺失的 id?的主要内容,如果未能解决你的问题,请参考以下文章

查找缺失行的 SQL 查询返回语法错误

连接两个sql表并分组

mysql查询加入,比较两个表并返回第一个表中的所有记录

连接两个表并从一列返回多个匹配项的 SQL 查询?

SQL - 连接 2 个表并返回 2 行之间的值差异

SQL如何编写返回缺失日期范围的查询?