Результат различных объединений по сценарию - PullRequest
1 голос
/ 28 марта 2019

У меня есть две таблицы test1 и test2, каждая из которых содержит один столбец с некоторыми значениями.

Я применил внутреннее и внешнее объединения, но у меня возникли путаницы с выводом.

Create table test1
( id int)
insert into test1 values (1)
insert into test1 values (1)
insert into test1 values (1)


Create table test2
( id int)
insert into test2 values (1)
insert into test2 values (1)
insert into test2 values (NULL)

select a.id from test1 a inner join test2 b on a.id = b.id

Я быложидая,

1
1
Null

как выходные данные для внутреннего соединения, левого соединения и правого соединения.

Но первоначальный вывод был,

1
1
1
1
1
1

Не могли бы вы помочь мне впонимание этого во всех соединениях.

1 Ответ

1 голос
/ 28 марта 2019

Каждая из трех 1 в test1 соединяется с каждой из двух 1 в test2, и в результате получается 3х2 = 6 строк, которые вы получили в наборе результатов. Ничто не отличается между первым, вторым и третьим 1 в test1 и ничем не отличается между первым и вторым 1 в test2.

Также имейте в виду, что выполняются все следующие условия:

NULL = 1
NULL <> 1
NULL = NULL
NULL <> NULL

ложно. Все условия, имеющие NULL на одной стороне, будут оцениваться как ложные. Это потому, что NULL представляет неизвестное значение.

То, что вы ожидали, совершенно неверно, как вы можете видеть. Кажется, вы ожидали, что первая строка test1 будет соединена с первой строкой test2 и так далее. В sql такой «магии» нет - вся логика объединения помещается в предложение ON, которое объединяет 1, как было ранее.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...