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

Откуда: SPb
Сообщений: 458
          select 0
union all select 1
union all select 1
union     select 1
union all select 2


ожидаю
0
1
1
2


получаю
0
1
2


я как-то думал, что первые три строки дадут 0, 1, 1, а третья (union /*без all */ select 1 ) не даст видимого результата.
но фактически это не так. Почему?
15 ноя 12, 13:42    [13477987]     Ответить | Цитировать Сообщить модератору
 Re: Почему так?  [new]
Glory
Member

Откуда:
Сообщений: 104760
RubinDm
Почему?

Потому что кто-то не читает в хелпе про union

ALL
Incorporates all rows into the results. This includes duplicates. If not specified, duplicate rows are removed.
15 ноя 12, 13:44    [13478000]     Ответить | Цитировать Сообщить модератору
 Re: Почему так?  [new]
RubinDm
Member

Откуда: SPb
Сообщений: 458
Glory, для справки.. мы тож не первый день за рулем, и читаем не меньше Вашего ;]
Там (в BOL) ни слова не сказано о том, в каком порядке выполняется объединение. А раз так, логично было бы предположить, что выполняются они сверху вниз. Условно пронумеруем все объединения.. первые три сами по себе дают верный результат (0,1,1). Если следовать предположению, что все действительно объединяется в последовательности сверху вниз, то четвертый юнион применяется к двум наборам данных (0,1,1) union (1) ..
а.. ну да.. млин.. тема закрыта ;)
15 ноя 12, 14:05    [13478160]     Ответить | Цитировать Сообщить модератору
 Re: Почему так?  [new]
Glory
Member

Откуда:
Сообщений: 104760
RubinDm
Там (в BOL) ни слова не сказано о том, в каком порядке выполняется объединение.

Причем тут порядок ? если отсутствие ALL удаляет дубликаты, а не игнорирует их.
15 ноя 12, 14:12    [13478217]     Ответить | Цитировать Сообщить модератору
 Re: Почему так?  [new]
Glory
Member

Откуда:
Сообщений: 104760
          select 0
union all select 1
union all select 1
union     select 2
15 ноя 12, 14:16    [13478247]     Ответить | Цитировать Сообщить модератору
 Re: Почему так?  [new]
HandKot
Member

Откуда: Sergiev Posad
Сообщений: 2994
RubinDm
А раз так, логично было бы предположить, что выполняются они сверху вниз. Условно пронумеруем все объединения..


в БОЛ как раз написано

Если оператор EXCEPT или INTERSECT используется в выражении вместе с другими операторами, оно обрабатывается в следующем порядке:
1. Выражения в скобках.
2. Оператор INTERSECT.
3. Операторы EXCEPT и UNION обрабатываются слева направо в соответствии с их позицией в выражении.

хоть это написано про EXCEPT и INTERSECT, но принцип работает и когда их нет
16 ноя 12, 08:28    [13481650]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить