在与外键匹配的多个表上使用JOIN

时间:2014-02-18 04:00:57

标签: mysql sql join

我有一个两难的境地,我想在我的所有22个表中使用JOIN将它们组合成一个长行,每个company我有一个主表company,其{{1}作为主键和其他22个引用CompanyID的表,其中一些表不包含公司的条目,而其他表的公式条目。因此,如果我使用INNER JOIN,则不会显示其中一个表中不包含条目的公司。有没有办法让它显示出来?

company.CompanyID

例如,我的数据库中有5家公司,其中只有4家公司显示上述语句,因为其中一家公司在SELECT * FROM `company` C INNER JOIN sales S ON S.CompanyID = C.CompanyID INNER JOIN owner O ON O.CompanyID = S.CompanyID 内没有任何条目。

3 个答案:

答案 0 :(得分:3)

如果您的参考密钥表没有主键记录但仍然需要该记录,则使用LEFT JOIN

试试这个

SELECT * FROM `company` C
LEFT JOIN sales S ON S.CompanyID = C.CompanyID
LEFT JOIN owner O ON O.CompanyID = S.CompanyID

答案 1 :(得分:1)

要删除重复的ID,请使用using子句:

SELECT *
FROM `company` C LEFT OUTER JOIN
      sales S
      USING (CompanyID) LEFT OUTER JOIN
      owner O
      USING (CompanyID);

using子句只输出每个ID的一个副本(在最新版本的MySQL中 - 此行为随时间而变化)。

答案 2 :(得分:1)

实际上很简单,你应该使用LEFT JOIN从主表中获取所有记录,记住LEFT JOIN将返回左表的所有记录。

所以查询将是这样的

SELECT * FROM `company` c
LEFT JOIN sales S ON c.CompanyID  = S.CompanyID 
LEFT JOIN owner O ON O.CompanyID = S.CompanyID
and so on..