Странная проблема с внешним соединением - PullRequest
0 голосов
/ 10 февраля 2020

Я пытаюсь понять запрос, который имеет внешнее соединение и ведет себя не так, как я ожидал.

Сценарий таков: у меня SQL, который выглядит примерно так:

with x as (
  select id 
  from a
),
y as (
  select id
  from b
)

select x.id
from x 
full outer join y on x.id = y.id
where (x.id is null or y.id is null)

Теперь предположим, что в таблице или таблице b нет нулевых идентификаторов, так как я проверял их по отдельности.

Если это так, то как вышеприведенное SQL возвращает строки с нулевыми значениями в x.id, когда в проверенном нами x cte не было возвращено нулевых значений для идентификатора? Но если я заменю полное внешнее соединение на левое, то не будет возвращенных строк.

Это сценарий, с которым я имею дело и пытаюсь понять. Это может быть из-за моей неосведомленности о том, как работает внешнее соединение.

Спасибо

1 Ответ

0 голосов
/ 10 февраля 2020

Это то, что делает внешнее соединение. Если совпадений нет, столбцам из таблицы other присваивается значение NULL.

Это находит id s, которые находятся в одной таблице, но не в другой.

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