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

Откуда: Москва
Сообщений: 45
Глупый, возможно, вопрос, но сегодня наткнулся на непонятное мне поведение.

SELECT column1, column1 FROM dbo.MY_TABLE ORDER BY column1

SELECT column1, column1 FROM dbo.MY_TABLE x ORDER BY x.column1


На мой взгляд, эти запросы одинаковы. Однако первый дает ошибку, тогда как второй - выполняется без вопросов.

В чем разница между ними? Объясните, пожалуйста.
16 июн 15, 17:30    [17777914]     Ответить | Цитировать Сообщить модератору
 Re: Алиас или не алиас  [new]
o-o
Guest
у меня сортирует и в первом варианте

Microsoft SQL Server 2008 R2 (SP3) - 10.50.6000.34 (Intel X86) Aug 19 2014 12:21:07 Copyright (c) Microsoft Corporation Developer Edition on Windows NT 6.1 <X86> (Build 7601: Service Pack 1)

К сообщению приложен файл. Размер - 33Kb
16 июн 15, 17:46    [17778001]     Ответить | Цитировать Сообщить модератору
 Re: Алиас или не алиас  [new]
o-o
Guest
о блин, это в режиме совместимости 2000 выполнилось.
а на базе с compatibility_level 100 да,
Msg 209, Level 16, State 1, Line 3
Ambiguous column name 'object_id'.
16 июн 15, 17:49    [17778021]     Ответить | Цитировать Сообщить модератору
 Re: Алиас или не алиас  [new]
Basma4
Member

Откуда:
Сообщений: 124
ils-abs,

https://connect.microsoft.com/SQLServer/feedback/details/644134/order-by-clause-incorrectly-produces-ambiguous-column-name
16 июн 15, 17:56    [17778067]     Ответить | Цитировать Сообщить модератору
 Re: Алиас или не алиас  [new]
o-o
Guest
значит, парсер поменялся.
и логика примерно такая: у нас 2 одноименных столбца и оба без алиасов?
значит, неясно, по к-ому из них сортировать (ну, может они из разных таблиц)
поэтому стоп, вываливаем ошибку.
а если алиас есть, то первый этап проверки пройден, теперь проверим, понятно или нет, откуда именно столбец.

а раньше трудолюбивее было, не останавливалось на этапе 1, проверялось сразу второе.
а теперь, чтоб лишнего не переработать, отлуп дается раньше
16 июн 15, 17:57    [17778075]     Ответить | Цитировать Сообщить модератору
 Re: Алиас или не алиас  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 9163
o-o, учат хорошим манерам :)
16 июн 15, 18:01    [17778096]     Ответить | Цитировать Сообщить модератору
 Re: Алиас или не алиас  [new]
daw
Member

Откуда: Муром -> Москва
Сообщений: 7381
o-o
а раньше трудолюбивее было, не останавливалось на этапе 1, проверялось сразу второе.
а теперь, чтоб лишнего не переработать, отлуп дается раньше


хорошо вы о людях думаете, - а на самом деле там очень веселая бага была.
описано здесь: "При привязке ссылок столбцов в списке ORDER BY..."
https://msdn.microsoft.com/ru-ru/library/bb510680(v=sql.105).aspx
16 июн 15, 19:11    [17778366]     Ответить | Цитировать Сообщить модератору
 Re: Алиас или не алиас  [new]
o-o
Guest
BOL
Compatibility-level setting of 80
...
При привязке ссылок столбцов в списке ORDER BY к столбцам,
определенным в списке SELECT, неоднозначность столбцов не учитывается,
иногда не учитываются и префиксы столбцов.

да уж
звучит заманчиво, если не сказать мило-издевательски.
спасибо за экскурс в историю
16 июн 15, 20:55    [17778699]     Ответить | Цитировать Сообщить модератору
 Re: Алиас или не алиас  [new]
Makar4ik
Member

Откуда: Когда-то были Лужки, а теперь Бордюр-Сити.
Сообщений: 2680
ils-abs
Глупый, возможно, вопрос, но сегодня наткнулся на непонятное мне поведение.

SELECT column1, column1 FROM dbo.MY_TABLE ORDER BY column1

SELECT column1, column1 FROM dbo.MY_TABLE x ORDER BY x.column1


На мой взгляд, эти запросы одинаковы. Однако первый дает ошибку, тогда как второй - выполняется без вопросов.

В чем разница между ними? Объясните, пожалуйста.
Ну дык.
А откуда он знает в первом случае, как сортировать? По column1, или по column1?
А во втором - вы ему отдельное поле выдали для этого. Сортирует - только в путь! )))))))))

Ваши два запроса - полный аналог другого примера:

select name, name from sysobjects order by name
select name, name from sysobjects order by id

В вашем случае x.column1 совсем не идентична column1
17 июн 15, 01:57    [17779744]     Ответить | Цитировать Сообщить модератору
 Re: Алиас или не алиас  [new]
o-o
Guest
Makar4ik,

С чего вдруг при выдаче алиаса *таблице* переименуются столбцы? Проверяйте что ли свои фантазии, минутное же дело. Да и в первом случае, только вам не понятно, по column1 или column1,это ж не на слух "улица Койкого", таблица одна, имена столбцов в пределах таблицы уникальны, переименований столбцов в списке select нет

К сообщению приложен файл. Размер - 52Kb
17 июн 15, 08:27    [17779955]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить