Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Вопрос по LEFT JOIN  [new]
Yagrus2
Member

Откуда: Москва
Сообщений: 899
Всем привет.
Есть две таблицы

CREATE TABLE T1
(
ID_LOAN INT
)

CREATE TABLE T2
(
ID_LOAN INT
)


INSERT INTO T1 VALUES (1)
INSERT INTO T1 VALUES (2)
INSERT INTO T1 VALUES (3)

INSERT INTO T2 VALUES (1)
INSERT INTO T2 VALUES (2)
INSERT INTO T2 VALUES (3)


Написал такой запрос

SELECT F.ID_LOAN, S.ID_LOAN
FROM T1 AS F
LEFT JOIN T2 AS S
ON F.ID_LOAN = S.ID_LOAN AND
     F.ID_LOAN IS NULL


Получил такой набор
1 NULL
2 NULL
3 NULL


Не могу понять, как получилось. С одной стороны LEFT JOIN гарантирует, что таблица T1 будет полностью присутствовать в результирующем наборе, но условие F.ID_LOAN IS NULL не выполнено.
25 окт 13, 10:24    [15030064]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по LEFT JOIN  [new]
Glory
Member

Откуда:
Сообщений: 104760
Yagrus2
но условие F.ID_LOAN IS NULL не выполнено.

Потому что это условие относится к результату выборки из T2, а не из T1
25 окт 13, 10:28    [15030103]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по LEFT JOIN  [new]
Yagrus2
Member

Откуда: Москва
Сообщений: 899
Glory,
Спасибо понял!
25 окт 13, 10:45    [15030224]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по LEFT JOIN  [new]
iap
Member

Откуда: Москва
Сообщений: 47001
Условие
F.ID_LOAN = S.ID_LOAN AND F.ID_LOAN IS NULL
никогда не вернёт TRUE.
Бессмыслица.
25 окт 13, 13:43    [15031652]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по LEFT JOIN  [new]
Ennor Tiegael
Member

Откуда:
Сообщений: 3274
iap,

...за исключением ситуации, когда в коннекте стоит SET ANSI_NULLS OFF.

В данном конкретном случае я не удивлюсь :)
25 окт 13, 15:27    [15032686]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по LEFT JOIN  [new]
Гость333
Member

Откуда:
Сообщений: 3683
Ennor Tiegael
...за исключением ситуации, когда в коннекте стоит SET ANSI_NULLS OFF.

Неа, эта настройка не влияет на сравнение двух полей.

use tempdb;

set ansi_nulls off;

create table t(a int, b int);

insert t(a,b) values(null, null);

select * from t where a=b;

drop table t;


a           b
----------- -----------

(0 row(s) affected)

Она влияет на сравнение с константой NULL либо со скалярной переменной.
25 окт 13, 15:31    [15032727]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить