我有一个进退两难的问题,我想在我的所有22个表上使用JOIN将它们组合成一个长行,对于每个company,我有一个主表company,它以CompanyID作为主键,还有22个引用company.CompanyID的表--其中一些表不包含公司的条目,而另一些表则包含。因此,如果我使用in,那么在其中一个表中不包含条目的公司就不会出现。有没有办法让它不受影响地出现?
SELECT * FROM `company` C
INNER JOIN sales S ON S.CompanyID = C.CompanyID
INNER JOIN owner O ON O.CompanyID = S.CompanyID例如,我的数据库中有5家公司,其中只有4家公司出现在上面的语句中,因为其中一家公司在owner中根本不包含条目。
发布于 2014-02-18 04:14:31
若要删除重复ids,请使用using子句:
SELECT *
FROM `company` C LEFT OUTER JOIN
sales S
USING (CompanyID) LEFT OUTER JOIN
owner O
USING (CompanyID);using子句将只输出每个ID的一个副本(在最新版本的MySQL中--随着时间的推移,这种行为已经发生了变化)。
发布于 2014-02-18 04:04:25
当引用键表dost没有主键记录,但仍然需要该记录时,请使用左联接
试着像这样
SELECT * FROM `company` C
LEFT JOIN sales S ON S.CompanyID = C.CompanyID
LEFT JOIN owner O ON O.CompanyID = S.CompanyID发布于 2014-02-18 04:15:24
实际上很容易,您应该使用左联接从主表中获取所有记录,记住左联接将返回左表的所有记录。
所以查询将会是这样的
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..https://stackoverflow.com/questions/21844075
复制相似问题