内部连接多个表

时间:2016-11-10 16:18:48

标签: mysql sql postgresql join

我想,我可能有一种误解,联接如何在多个表上运行。假设您有三个表A,B,C,您需要加入它们。

这是V1

SELECT A.NAME AS name1
    ,B.NAME AS name2
    ,C.NAME AS name3
FROM A
INNER JOIN B
    ON A.id = B.id
INNER JOIN C
    ON B.id = C.id

这是V2

SELECT A.NAME AS name1
    ,D.NAME AS name2
    ,D.NAME AS name3
FROM A
INNER JOIN (
    SELECT B.NAME AS name2
        ,C.NAME AS name3
    FROM B
    INNER JOIN C
        ON B.id = C.id
    ) AS D
    ON A.id = D.id

这两个版本之间有任何性能差异吗? 即使第一个查询看起来更干净,我也需要构建一个Query Builder UI,将连接限制为只有2个表有帮助。

1 个答案:

答案 0 :(得分:1)

一般来说,子选择的一个问题是它可能需要RDBMS创建一个临时表来完成子选择 - 并且在足够大的表上这可能是一个严重的开销 - 并且可能无法使用任何索引在子选择上优化查询,然后您扫描表格。

当然,DDL和表格的大小都不包含在内,所以最好的方法是让Postgres解释它打算做什么,比较/对比。