【问题标题】:Compare two SQL tables and return missing ids?比较两个 SQL 表并返回缺失的 id?
【发布时间】: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 不支持此操作,但在搜索中使用它会返回大量用于工作和其他方法的结果。 (这个问题时不时出现。)

标签: mysql sql except


【解决方案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)

【讨论】:

    猜你喜欢
    • 2020-12-12
    • 2021-12-23
    • 1970-01-01
    • 1970-01-01
    • 2017-08-28
    • 2021-04-15
    • 2021-07-26
    • 2016-01-25
    • 2017-11-03
    相关资源
    最近更新 更多