首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >涉及三个表的MySQL内连接

问涉及三个表的MySQL内连接
EN

Stack Overflow用户
提问于 2014-02-11 16:15:02
回答 3查看 133关注 0票数 0

我正在处理四张桌子:

  • 询问,
  • 商店,
  • cluster_group,
  • tv_region

我想检索属于特定TV区域记录的查询记录。

查询记录要么属于存储区中的记录,要么属于cluster_group表。查询表中有“store_id”和“cluster_group_id”列。其中一个将为null,另一个将引用存储区或cluster_group表中的记录。商店表和cluster_group表都有一个'tv_region_id‘列。

为了检索属于具有id = 2的TV区域记录的查询记录,我编写了以下SQL语句:

代码语言:javascript
复制
SELECT query.id AS query_id, cluster_group.name as cluster_name, cluster_group.tv_region_id as cluster_tv_region, store.store_name
FROM query
INNER JOIN cluster_group
ON cluster_group.id=query.cluster_group_id

INNER JOIN store
ON store.id=query.store_id

WHERE cluster_group.tv_region_id = 2
AND store.tv_region_id = 2;

问题是,即使存在属于指定TV区域的查询记录(通过群集组或存储记录),它仍然返回零条记录。我可能误解了“内部连接”是如何工作的。

我正在使用Doctrine 2,并尝试使用左联接进行查询,但它仍然没有返回任何内容,我猜这是因为它也返回空值。如何使它只返回我感兴趣的查询记录,而不返回空值?

感谢有人能为我指出正确的方向来检索相关的查询记录。

EN

回答 3

Stack Overflow用户

发布于 2014-02-11 16:17:12

您将需要使用外部联接,或者可能是左边。

内部联接只返回双方都有匹配记录的数据。正如您在问题中所述,您只得到一方或另一方的匹配,因此在存储和集群中永远不会有匹配的记录。

Jeff在他的博客http://www.codinghorror.com/blog/2007/10/a-visual-explanation-of-sql-joins.html中很好地解释了连接类型

票数 0
EN

Stack Overflow用户

发布于 2014-02-11 16:21:05

试试这个:-

代码语言:javascript
复制
SELECT query.id AS query_id, cluster_group.name as cluster_name, cluster_group.tv_region_id as cluster_tv_region, store.store_name
FROM query
LEFT OUTER JOIN cluster_group
ON cluster_group.id=query.cluster_group_id
AND cluster_group.tv_region_id = 2
LEFT OUTER JOIN store
ON store.id=query.store_id
AND store.tv_region_id = 2

编辑-没有教条的经验,但你可以尝试使用联盟:-

代码语言:javascript
复制
SELECT query.id AS query_id, cluster_group.name as cluster_name, cluster_group.tv_region_id as cluster_tv_region, NULL AS store_name
FROM query
INNER JOIN cluster_group
ON cluster_group.id=query.cluster_group_id
AND cluster_group.tv_region_id = 2
UNION
SELECT query.id AS query_id, NULL as cluster_name, NULL as cluster_tv_region, store.store_name
FROM query
INNER JOIN store
ON store.id=query.store_id
AND store.tv_region_id = 2
票数 0
EN

Stack Overflow用户

发布于 2014-07-12 09:33:41

对我来说是这样的:

代码语言:javascript
复制
from table1 inner join table2 on table1.id = table2.id
inner join table3 on table1.id = table3.id
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21707140

复制
相关文章

相似问题

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