【问题标题】:MySQL Return NULL on Failed JOINMySQL 在 JOIN 失败时返回 NULL
【发布时间】:2014-02-14 15:33:16
【问题描述】:

我有两个 MySql 表:contractscustomers。客户可能有与之相关的合同。有些合同没有客户就存在,有些客户没有合同。我需要查询所有客户和合同,并在可能的情况下将它们加入同一行。在没有找到合同或客户的行中,我想简单地放置NULL

就目前而言,我只返回两者都存在的行。我意识到这就是 join 的用途,但我不确定如何简单地返回所有内容。不指定 JOIN 子句会多次返回每个结果,这也不会。

这是我目前的 SQL 不足:

SELECT cu.ID, cu.`Name`, cu.Contract, co.ID, co.`Type`
FROM test.customers cu
INNER JOIN test.contracts co ON co.ID = cu.Contract;

任何帮助将不胜感激。

【问题讨论】:

  • 你正在寻找一个 MySQL 不支持的full outer join

标签: mysql


【解决方案1】:

您感兴趣的内容称为“左连接”。

SELECT cu.ID, cu.`Name`, cu.Contract, co.ID, co.`Type`
FROM test.customers cu
LEFT JOIN test.contracts co ON co.ID = cu.Contract;

这将为没有匹配的合同返回空值。

但是,这也不会找到“没有客户”的实例。

解决方案是添加第二个查询并将其合并。

UNION 
SELECT cu.ID, cu.`Name`, cu.Contract, co.ID, co.`Type`
FROM test.contracts co
LEFT JOIN test.customers cu ON co.ID = cu.Contract
WHERE cu.ID is null;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-26
    • 1970-01-01
    • 2012-10-26
    • 2019-03-25
    • 1970-01-01
    • 2012-08-20
    相关资源
    最近更新 更多