SQL Server - может кто-нибудь объяснить этот запрос? - PullRequest
0 голосов
/ 30 августа 2018

У меня есть запрос, который я не могу понять. Может кто-нибудь объяснить мне, что происходит со всеми этими запятыми?

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

Я не получаю часть, где перечислены группы или таблицы. По части WHERE я выяснил, что она была связана или, по крайней мере, использовалась, как при использовании «ОТ». Может кто-нибудь объяснить мне, что это и название или, по крайней мере, иметь ссылку на документацию этой формы ссылки?

Большое спасибо.

1 Ответ

0 голосов
/ 30 августа 2018

Это означает, что вы присоединяетесь 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 соединены влево, а затем TABLEC и TABLED перекрестно соединены с результатом. Так что мой окончательный результат будет

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 Clause

...