MySQL在失败的JOIN上返回NULL

时间:2014-01-23 20:56:41

标签: mysql

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

就目前而言,我只返回两者都存在的行。我意识到这是一个联接的目的,但我不确定如何简单地归还所有内容。指定no 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;

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:2)

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

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;