【问题标题】:full outer join in mysql [duplicate]mysql中的完全外连接[重复]
【发布时间】:2011-12-26 20:42:19
【问题描述】:

可能重复:
Full Outer Join in MySQL

有两个表tableA和table B 两个表都有共同的列 id

我们希望得到所有记录都在 A 但不在 B 中的结果 以及所有存在于 B 但不存在于 A 中的记录

问候, 金塔基兰

【问题讨论】:

  • 好的,那么您尝试了什么,什么“没用”?
  • 我们希望您尝试自己解决此问题,而不是要求社区为您提供完整的解决方案。当您有一些代码向我们展示证明您所做的一些努力时(即使它是错误的),请更新您的问题并标记以重新打开。谢谢。

标签: mysql join


【解决方案1】:

您正在寻找 MINUS SET OPERATOR:

“我们希望得到所有记录都在 A 但不在 B 中的结果”

简单的方法:

SELECT A.*
FROM A 
WHERE A.id not in (SELECT id FROM B)

使用完全外部连接

SELECT A.*
FROM A full outer join B on A.id = B.id
WHERE B.id is Null

正确的方法:

SELECT A.*
FROM A left outer join B on A.id = B.id
WHERE B.id is Null

将 A 更改为 B 并将 B 更改为 A 以获得所有记录在 B 但不在 A 中的结果。

【讨论】:

    【解决方案2】:

    我建议您阅读 Coding Horror 的 Jeff Atwood 撰写的文章 A Visual Explanation of SQL Joins

    全外连接生成表 A 和表 B 中所有记录的集合,并在可用的情况下从双方匹配记录。 如果没有匹配,缺失的一侧将包含 null。

    【讨论】:

    • 哇,我确定名字拼写是故意的..
    • first 和 last 都关闭了,但方式仍然是文字。
    【解决方案3】:

    您可以使用 UNION 运算符如下 SELECT * FROM tablea UNION SELECT * FROM tableb 如果您想了解更多关于 UNION operator

    【讨论】:

      【解决方案4】:

      最好使用LEFT OUTER JOIN 来实现,其中谓词(WHERE 子句)确保连接的行为 NULL;类似:

      SELECT A.* FROM A LEFT OUTER JOIN B ON A.id = B.a_id WHERE B.a_id IS NULL;
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-03-11
        • 1970-01-01
        • 2017-06-10
        • 1970-01-01
        • 2021-10-12
        • 1970-01-01
        • 1970-01-01
        • 2018-07-12
        相关资源
        最近更新 更多