比较两个 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 中缺少的所有查询? 嗨,保罗,不,我需要的只有一种方法。 关键字是EXCEPT
。 mysql 不支持此操作,但在搜索中使用它会返回大量用于工作和其他方法的结果。 (这个问题时不时出现。)
【参考方案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?的主要内容,如果未能解决你的问题,请参考以下文章