我有一个两难的境地,我想在我的所有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
内没有任何条目。
答案 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..