多个表的多个内连接
Posted
技术标签:
【中文标题】多个表的多个内连接【英文标题】:Multiple inner joins with multiple tables 【发布时间】:2011-11-01 06:44:17 【问题描述】:所以我有四张桌子。每个表都有一个用于前一个表 id 的 id。所以我的点击表有一个 id 和一个它来自的广告的 id。在广告表中,它有一个广告 ID 和一个广告活动 ID。所以这里有一个例子。
Table4 -
id company table_id
11 hp 20
12 apple 23
13 kohls 26
14 target 21
15 borders 28
Table3 -
id value table2_id
21 ks 53
22 al 54
23 tx 53
24 fl 55
25 co 51
Table2 -
id value table1_id
51 ks 34
52 al 34
53 tx 33
54 fl 35
55 co 31
Table1 -
id value
31 ks
32 al
33 tx
34 fl
35 co
因此,要找出表 4 中的值来自何处,我需要重新检查每个表并检查它们具有的 id。基本上,我想知道表 1 中的哪些值与表 4 中的值相关联。
表 4 是网站的访问者,表 1 是互联网广告。我想知道哪些访问者来自哪些广告。不幸的是,数据的设置使我只能从访问者到来源再到广告组再到广告退一步。这有意义吗?
无论如何,我想知道使用 4 个内部连接是否是解决此问题的最佳策略,或者是否有一些我不知道的更简单的 mysql 解决方案。
【问题讨论】:
是的,使用连接来组合表格 SQL Inner-join with 3 tables? 的可能重复项 【参考方案1】:内连接可能是最好的方法,你只需要 3 个。
这将为您提供一个包含两列的结果集:公司和关联值。
SELECT Table4.company, table1.id, table1.value
FROM Table1
INNER JOIN Table2
ON Table2.table1_id = Table1.id
INNER JOIN Table3
ON Table3.table2_id = Table2.id
INNER JOIN Table4
ON Table4.table3_id = Table3.id
【讨论】:
虽然,鉴于我看到的数据,如果没有实际匹配,我几乎会使用 LEFT JOIN(除非保证完整性在另一个表中有匹配)。 同意。但是,如果没有匹配项,他可能不想要任何数据。 @Narnian 不应该INNER JOIN Table1
是 INNER JOIN Table2
?以上是关于多个表的多个内连接的主要内容,如果未能解决你的问题,请参考以下文章