Гость
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / outer join синтаксис TSQL и ANSI / 10 сообщений из 10, страница 1 из 1
22.06.2005, 14:18
    #33128986
karitos
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
outer join синтаксис TSQL и ANSI
При обьединении 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
22.06.2005, 14:27
    #33129009
karitos
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
outer join синтаксис TSQL и ANSI
Сервер ASE 12.0.0
...
Рейтинг: 0 / 0
23.06.2005, 10:32
    #33130496
Acid
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
outer join синтаксис TSQL и ANSI
Лучше не использовать запись вида *=


Читать тут


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
23.06.2005, 10:34
    #33130500
Acid
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
outer join синтаксис TSQL и ANSI
Как я понимаю, в первом случае условие t1.k1*=t2.k1 проверяется раньше чем ISNULL(...)

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

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

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

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


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