|
outer join синтаксис TSQL и ANSI
|
|||
---|---|---|---|
#18+
При обьединении 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 а в данном срабатывает ? ... |
|||
:
Нравится:
Не нравится:
|
|||
22.06.2005, 14:18 |
|
outer join синтаксис TSQL и ANSI
|
|||
---|---|---|---|
#18+
Сервер ASE 12.0.0 ... |
|||
:
Нравится:
Не нравится:
|
|||
22.06.2005, 14:27 |
|
outer join синтаксис TSQL и ANSI
|
|||
---|---|---|---|
#18+
Лучше не использовать запись вида *= Читать тут 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. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.06.2005, 10:32 |
|
outer join синтаксис TSQL и ANSI
|
|||
---|---|---|---|
#18+
Как я понимаю, в первом случае условие t1.k1*=t2.k1 проверяется раньше чем ISNULL(...) т.е. соединяются строки для которых t1.k1=null и t2.k1=null ... |
|||
:
Нравится:
Не нравится:
|
|||
23.06.2005, 10:34 |
|
outer join синтаксис TSQL и ANSI
|
|||
---|---|---|---|
#18+
AcidКак я понимаю, в первом случае условие t1.k1*=t2.k1 проверяется раньше чем ISNULL(...) т.е. соединяются строки для которых t1.k1=null и t2.k1=null Даже хуже - когда проверяется условие с ISNULL() - вообще не определено. Оно может проверяться как до, так и после JOIN-а (так реально работает сервер). Так что еще раз хочу призвать - никогда не используйте TSQL outer joins если есть возможность использовать ANSI outer joins. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.06.2005, 12:46 |
|
outer join синтаксис TSQL и ANSI
|
|||
---|---|---|---|
#18+
Всем большое спасибо, начинает проясняться. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2012, 15:42 |
|
outer join синтаксис TSQL и ANSI
|
|||
---|---|---|---|
#18+
is_meВсем большое спасибо, начинает проясняться. спустя 7 лет? ;) ... |
|||
:
Нравится:
Не нравится:
|
|||
17.05.2012, 17:19 |
|
outer join синтаксис TSQL и ANSI
|
|||
---|---|---|---|
#18+
komradis_meВсем большое спасибо, начинает проясняться. спустя 7 лет? ;) Просто я начал изучение t-sql с Фленова М. Transact-SQL, он писал что предпочтительнее использовать объединения типа *=, из за их легко читаемости. Издание 2006. Да и в нашей АБС небезизвестного производителя в отчетах и процедурах больше объединения в стиле SQL используются. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.05.2012, 17:29 |
|
outer join синтаксис TSQL и ANSI
|
|||
---|---|---|---|
#18+
is_meДа и в нашей АБС небезизвестного производителя диасофт ? :) ... |
|||
:
Нравится:
Не нравится:
|
|||
17.05.2012, 18:24 |
|
|
start [/forum/topic.php?fid=55&msg=37799876&tid=2010135]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
182ms |
get topic data: |
88ms |
get forum data: |
2ms |
get page messages: |
72ms |
get tp. blocked users: |
2ms |
others: | 16ms |
total: | 392ms |
0 / 0 |