SQL Server - 有人可以解释这个查询吗?

问题描述 投票:0回答:1

我有一个我无法理解的查询。有人可以向我解释所有这些逗号是怎么回事吗?

SELECT * FROM TABLE1 
LEFT OUTER JOIN TABLE2 ON TABLE1.Column1 = TABLE2.Column1, 
TABLE3, TABLE4, TABLE5, TABLE6 
WHERE [...]

我没有得到列出一堆或多个表的部分。我通过WHERE部分想出它被绑定或至少像“FROM”一样使用。有人可以向我解释它是什么和名称,或至少有链接到这种形式的链接的文档?

非常感谢。

sql-server sql-server-2012
1个回答
1
投票

这意味着你正在使用TABLE1加入TABLE2LEFT JOIN

因此,如果在TABLE2.Column1中为TABLE1.Column1存在匹配值,则将显示值,如果没有匹配,则列将存在,但值将为NULL

对于所有其他表,您使用的是CROSS JOIN。所以它将创建一个Cartesian Product与从第一次加入获得的记录

DECLARE @TABLEA TABLE
(
    ColA INT
)

DECLARE @TABLEB TABLE
(
    ColB INT
)

DECLARE @TABLEC TABLE
(
    ColC INT
)

DECLARE @TABLED TABLE
(
    ColD INT
)

INSERT INTO @TABLEA
VALUES(1),(2),(3)

INSERT INTO @TABLEB
VALUES(4),(5),(6)

INSERT INTO @TABLEC
VALUES(7),(8),(9)

INSERT INTO @TABLED
VALUES(10)

SELECT
    *
    FROM @TABLEA A
        LEFT JOIN @TABLEB B
            ON A.ColA = B.ColB
            ,@TABLEC,@TABLED

在上面的例子中,TableA和TableB是LEFT JOINed,然后TABLES AND TABLES与Result交叉连接。所以我的最终输出将是

ColA        ColB        ColC        ColD
----------- ----------- ----------- -----------
1           NULL        7           10
1           NULL        8           10
1           NULL        9           10
2           NULL        7           10
2           NULL        8           10
2           NULL        9           10
3           NULL        7           10
3           NULL        8           10
3           NULL        9           10

您可以使用WHERE子句从任何表中过滤记录

© www.soinside.com 2019 - 2024. All rights reserved.