powered by simpleCommunicator - 2.0.50     © 2025 Programmizd 02
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / outer join синтаксис TSQL и ANSI
10 сообщений из 10, страница 1 из 1
outer join синтаксис TSQL и ANSI
    #33128986
karitos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
При обьединении 2 таблиц используя разный синтаксис TSQL и ANSI - получаю разные результаты.

create table #temp1 (k1 int, s2 varchar(20))
create table #temp2 (k1 int, s2 varchar(20))

insert #temp1 (k1, s2) values (100, 't1_100')
insert #temp1 (k1, s2) values (101, 't1_101')
insert #temp1 (k1, s2) values (102, 't1_102')
insert #temp1 (k1, s2) values (103, 't1_103')

insert #temp2 (k1, s2) values (100, 't2_100')
insert #temp2 (k1, s2) values (101, 't2_101')

select t1.*, t2.*, isnull(t2.k1,t1.k1)
from #temp1 t1, #temp2 t2
where 1=1
and t1.k1 *= t2.k1
and isnull(t2.k1,t1.k1) in (101,102)

-- не верно
--k1 s2 k1 s2
--100 t1_100 [NULL] [NULL] 100 - ??
--101 t1_101 101 t2_101 101
--102 t1_102 [NULL] [NULL] 102
--103 t1_103 [NULL] [NULL] 103 - ??

Почему в данном случае не срабатывает isnull(t2.k1,t1.k1) in (101,102) ?

select t1.*, t2.*, isnull(t2.k1,t1.k1)
from #temp1 t1 LEFT OUTER JOIN #temp2 t2
ON t1.k1 = t2.k1
where 1=1
and isnull(t2.k1,t1.k1) in (101,102)

--k1 s2 k1 s2
--101 t1_101 101 t2_101 101
--102 t1_102 [NULL] [NULL] 102

а в данном срабатывает ?
...
Рейтинг: 0 / 0
outer join синтаксис TSQL и ANSI
    #33129009
karitos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сервер ASE 12.0.0
...
Рейтинг: 0 / 0
outer join синтаксис TSQL и ANSI
    #33130496
Acid
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Лучше не использовать запись вида *=


Читать тут


Transact-SQL outer joins are specified using the special comparison operators '* ='and '= *'. Using one (or more) of these operators in a query specifies an outer join between two tables in the From clause, though the semantics of such queries can be unclear. This is because TSQL outer join semantics were never formally defined, and in older releases of Adaptive Server Enterprise and Adaptive Server Anywhere the results of TSQL outer join queries could depend upon the access plan chosen by the optimizer. This iAnywhere Solutions' Technical White Paper describes the semantics of TSQL outer joins in detail, and in particular outlines the differences in support for TSQL outer joins between ASE and ASA. Because of these differences, iAnywhere Solutions recommends that customers use ANSI outer join syntax, rather than Transact-SQL outer join syntax, in their applications.
...
Рейтинг: 0 / 0
outer join синтаксис TSQL и ANSI
    #33130500
Acid
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Как я понимаю, в первом случае условие t1.k1*=t2.k1 проверяется раньше чем ISNULL(...)

т.е. соединяются строки для которых t1.k1=null и t2.k1=null
...
Рейтинг: 0 / 0
outer join синтаксис TSQL и ANSI
    #33133188
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AcidКак я понимаю, в первом случае условие t1.k1*=t2.k1 проверяется раньше чем ISNULL(...)
т.е. соединяются строки для которых t1.k1=null и t2.k1=null

Даже хуже - когда проверяется условие с ISNULL() - вообще не определено. Оно может проверяться как до, так и после JOIN-а (так реально работает сервер). Так что еще раз хочу призвать - никогда не используйте TSQL outer joins если есть возможность использовать ANSI outer joins.
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
outer join синтаксис TSQL и ANSI
    #37793417
is_me
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем большое спасибо, начинает проясняться.
...
Рейтинг: 0 / 0
outer join синтаксис TSQL и ANSI
    #37799557
Фотография komrad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
is_meВсем большое спасибо, начинает проясняться.
спустя 7 лет? ;)
...
Рейтинг: 0 / 0
outer join синтаксис TSQL и ANSI
    #37799588
is_me
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
komradis_meВсем большое спасибо, начинает проясняться.
спустя 7 лет? ;)
Просто я начал изучение t-sql с Фленова М. Transact-SQL,
он писал что предпочтительнее использовать объединения
типа *=, из за их легко читаемости. Издание 2006.
Да и в нашей АБС небезизвестного производителя
в отчетах и процедурах больше объединения в
стиле SQL используются.
...
Рейтинг: 0 / 0
outer join синтаксис TSQL и ANSI
    #37799711
Фотография komrad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
is_meДа и в нашей АБС небезизвестного производителя

диасофт ? :)
...
Рейтинг: 0 / 0
outer join синтаксис TSQL и ANSI
    #37799876
is_me
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
komradis_meДа и в нашей АБС небезизвестного производителя

диасофт ? :)
Ну воть, это уже не интересно становится ...
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / outer join синтаксис TSQL и ANSI
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]