我有两个MySql表:contracts
和customers
。客户可能有与之相关的合同。有些合同没有客户,有些客户没有合同。我需要查询所有客户和合同,并在可能的情况下将它们加入同一行。在没有找到合同或客户的行中,我只想放置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;
非常感谢任何帮助。
答案 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;