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

Откуда:
Сообщений: 26
Работаю с SQL Server 7.0
и очен удивился когда сравнил два запроса

Select * from t1 left join t2 on t1.id = t2.id where t2.id is null
и
Select * from t1,t2 where t1.id *= t2.id and t2.id is null

при
t1.id t2.id
---------- --------------
1 1
2 2
3 4

для указанных запросов получаю соответственно
t1.id t2.id
---------- --------------
3 null

и

t1.id t2.id
---------- --------------
1 null
2 null
3 null
может я чего не понимаю знаю только что Oracle на
Select * from t1,t2 where t1.id = t2.id (+) and t2.id is null
отвечает

t1.id t2.id
---------- --------------
3 null
9 дек 05, 13:23    [2157496]     Ответить | Цитировать Сообщить модератору
 Re: Почему у Microsoft LEFT JOIN и *= не одно и тоже ?  [new]
Taffy
Member

Откуда:
Сообщений: 20501
А мне вот еще интересно

Select id1 = t1.id, id2 = t2.id
from @t1 t1, @t2 t2
where t1.id *= t2.id and
t2.id is not null

выдает результат


id1 id2
----------- -----------
1 1
2 2
2 2
3 NULL

Я-то делаю left join но все же стало интересно. Почему так
9 дек 05, 13:46    [2157618]     Ответить | Цитировать Сообщить модератору
 Re: Почему у Microsoft LEFT JOIN и *= не одно и тоже ?  [new]
locky
Member

Откуда: Харьков, Украина
Сообщений: 62034

Taffy wrote:
> А мне вот еще интересно
>
> Select id1 = t1.id, id2 = t2.id
> from @t1 t1, @t2 t2
> where t1.id *= t2.id and
> t2.id is not null
>
> выдает результат
>
>
> id1 id2
> ----------- -----------
> 1 1
> 2 2
> 2 2
> 3 NULL
>
>
> Я-то делаю left join но все же стало интересно. Почему так
наверное потому, что в @t2 id2 действительно not null....

--
-------------------------
There's no silver bullet!

Posted via ActualForum NNTP Server 1.3

9 дек 05, 13:50    [2157643]     Ответить | Цитировать Сообщить модератору
 Re: Почему у Microsoft LEFT JOIN и *= не одно и тоже ?  [new]
sergei_p
Member

Откуда: Краснодар
Сообщений: 518
Select t1.id,t2.id from t1 left join t2 on t1.id = t2.id and t2.id is null
вернет тоже что и
Select * from t1,t2 where t1.id *= t2.id and t2.id is null
в данном случае результирующий набор определяется тем участвует ли условие t2.id is null в объединении или нет
9 дек 05, 14:05    [2157694]     Ответить | Цитировать Сообщить модератору
 Re: Почему у Microsoft LEFT JOIN и *= не одно и тоже ?  [new]
Шкшыр скуфь
Member

Откуда:
Сообщений: 175
это концептуальная проблема той нестандартной реализации языка SQL, которая тянется с лохматых годов. Описана в БОЛ. *= и =* сильно не рекомендуются.
От греха подальше МС перестает поддерживать конструции *= и =* начиная с Юкона, о чем было написано еще в БОЛ 2000.
9 дек 05, 18:32    [2159173]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить