首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在几个匹配外键的表上使用联接

在几个匹配外键的表上使用联接
EN

Stack Overflow用户
提问于 2014-02-18 04:00:57
回答 3查看 61关注 0票数 2

我有一个进退两难的问题,我想在我的所有22个表上使用JOIN将它们组合成一个长行,对于每个company,我有一个主表company,它以CompanyID作为主键,还有22个引用company.CompanyID的表--其中一些表不包含公司的条目,而另一些表则包含。因此,如果我使用in,那么在其中一个表中不包含条目的公司就不会出现。有没有办法让它不受影响地出现?

代码语言:javascript
复制
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中根本不包含条目。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-02-18 04:14:31

若要删除重复ids,请使用using子句:

代码语言:javascript
复制
SELECT *
FROM `company` C LEFT OUTER JOIN
      sales S
      USING (CompanyID) LEFT OUTER JOIN
      owner O
      USING (CompanyID);

using子句将只输出每个ID的一个副本(在最新版本的MySQL中--随着时间的推移,这种行为已经发生了变化)。

票数 1
EN

Stack Overflow用户

发布于 2014-02-18 04:04:25

当引用键表dost没有主键记录,但仍然需要该记录时,请使用左联接

试着像这样

代码语言:javascript
复制
SELECT * FROM `company` C
LEFT JOIN sales S ON S.CompanyID = C.CompanyID
LEFT JOIN owner O ON O.CompanyID = S.CompanyID
票数 3
EN

Stack Overflow用户

发布于 2014-02-18 04:15:24

实际上很容易,您应该使用左联接从主表中获取所有记录,记住左联接将返回左表的所有记录。

所以查询将会是这样的

代码语言:javascript
复制
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..
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21844075

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档