Php 涉及三个表的MySQL内部联接

Php 涉及三个表的MySQL内部联接,php,mysql,join,doctrine-orm,inner-join,Php,Mysql,Join,Doctrine Orm,Inner Join,我正在使用四张桌子: 质疑, 商店 集群(u组) 电视台地区 我想检索属于特定电视区域记录的查询记录 查询记录属于存储或群集组表中的记录。查询表具有“存储\u id”和“集群\u组\u id”列。其中一个将为空,而另一个将引用存储或群集组表中的记录。store和cluster_group表都有一个“tv_region_id”列 为了检索属于id为2的TV区域记录的查询记录,我编写了以下SQL语句: SELECT query.id AS query_id, cluster_group.name

我正在使用四张桌子:

  • 质疑,
  • 商店
  • 集群(u组)
  • 电视台地区
我想检索属于特定电视区域记录的查询记录

查询记录属于存储或群集组表中的记录。查询表具有“存储\u id”和“集群\u组\u id”列。其中一个将为空,而另一个将引用存储或群集组表中的记录。store和cluster_group表都有一个“tv_region_id”列

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

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区域的查询记录(通过集群组或存储记录),它也会返回零记录。我可能误解了“内部连接”的工作原理

我使用的是原则2,尝试使用左连接进行查询,但它仍然没有返回任何内容,我想这是因为它也返回空值。如何让它只返回我感兴趣的查询记录而不返回空值


如果有人能为我指出检索相关查询记录的正确方向,我将不胜感激。

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

内部联接只返回两边都有匹配记录的数据。正如您在问题中所说的,您只会在一端或另一端获得匹配,因此存储和集群之间永远不会有匹配记录

杰夫·阿特伍德(Jeff Atwood)在他的博客上很好地解释了连接类型-

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
编辑-没有教条经验,但您可以尝试使用工会:-

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

对我来说是这样的:

from table1 inner join table2 on table1.id = table2.id
inner join table3 on table1.id = table3.id

使用左外部联接,当没有匹配行时,它将返回空列,而内部联接(您使用过的)将不返回任何内容(因为两者上都需要有一行)。或者使用两个联合在一起的查询。条令可以从视图中选择吗?我正在使用条令,所以我的查询是用DQL编写的。我应用了左连接,但这仍然返回零记录,可能是因为空值。刚刚发现,在条令中,外部连接是不可能的。编辑建议尝试UNIONUNION是有意义的,但条令也不支持。无论如何,谢谢你的帮助。