多个表的多个内连接

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 Table1INNER JOIN Table2

以上是关于多个表的多个内连接的主要内容,如果未能解决你的问题,请参考以下文章

详解SQL Server连接(内连接外连接交叉连接)

内连接,外链接(左连接右连接全连接),交叉连接

上)

上)

上)

MSSQL 详解SQL Server连接(内连接外连接交叉连接)