我有一个我无法理解的查询。有人可以向我解释所有这些逗号是怎么回事吗?
SELECT * FROM TABLE1
LEFT OUTER JOIN TABLE2 ON TABLE1.Column1 = TABLE2.Column1,
TABLE3, TABLE4, TABLE5, TABLE6
WHERE [...]
我没有得到列出一堆或多个表的部分。我通过WHERE部分想出它被绑定或至少像“FROM”一样使用。有人可以向我解释它是什么和名称,或至少有链接到这种形式的链接的文档?
非常感谢。
这意味着你正在使用TABLE1
加入TABLE2
和LEFT 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
子句从任何表中过滤记录