![]() |
|
Модераторы: skyboy |
![]()
|
|
| KOHCEPBATOP |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 44 Регистрация: 21.4.2010 Репутация: нет Всего: 1 |
Столкнулся с неожиданной [для меня] проблемой. При использовании данной конструкции:
выдается ошибка: "The ORDER BY clause is invalid in views, inline functions, derived tables, subqueries, and common table expressions, unless TOP or FOR XML is also specified." Нашел в инете ее решение: select * from ( select top 100 percent * from tbl order by fld ) tmp Но хотелось бы понять, почему во втором случае добавление "top 100 percent" прокатывает. |
|||
|
||||
| boevik |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1452 Регистрация: 31.5.2004 Где: Израиль Репутация: нет Всего: 35 |
percent относится к конструкции top
выдаст 50% результатов. -------------------- Никогда не говори никогда |
|||
|
||||
| Zloxa |
|
|||
|
Чо? ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3473 Регистрация: 12.9.2008 Репутация: 53 Всего: 161 |
Наверное потому что, что top без сортировки мало полезен в виду своей недетерменированности, потому для него и сделано исключение. Позвольте полюбопытствовать, а зачем Вам нужна сортировка в подзапросе? -------------------- Достоверно известно, что 89% людей доверяют статистике взятой с потолка |
|||
|
||||
| KOHCEPBATOP |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 44 Регистрация: 21.4.2010 Репутация: нет Всего: 1 |
Я использовал следующий вариант: select distinct * from ( select top 100 percent fld1 from tbl order by fld2 ) tmp Посколько distinct вместе с order by не прокатывает, а сортировка осуществляется по полям, отсутствующим на выходе. |
||||
|
|||||
| Zloxa |
|
||||
|
Чо? ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3473 Регистрация: 12.9.2008 Репутация: 53 Всего: 161 |
А вы сам текст ошибки читать пробовали?
Прелестно! И что, получается? Можете показать план такого запроса, выдающего правильный результат? Даже если Вам кажется что это работает так, как вы ожидаете, отнюдь не факт что так будет всегда. Distinct потому и запрещает использовать в order by не используемые в select-листе выражения, что один из способов обеспечения неповторяемости строк - сортировка. Другими словами для получения distinct сервер вполне может пересортировать исходный набор, как ему заблагорассудится. Это сообщение отредактировал(а) Zloxa - 29.9.2010, 12:51 -------------------- Достоверно известно, что 89% людей доверяют статистике взятой с потолка |
||||
|
|||||
| KOHCEPBATOP |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 44 Регистрация: 21.4.2010 Репутация: нет Всего: 1 |
Zloxa, ёрничать мы все умеем. А по существу что-нибудь написать можете?
|
|||
|
||||
| Zloxa |
|
|||
|
Чо? ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3473 Регистрация: 12.9.2008 Репутация: 53 Всего: 161 |
KOHCEPBATOP, не по существу в моем посте было только слово "прелестно". Извините, если сочли мою иронию оскорбительной для себя.
Добавлено @ 13:12 Меня действитеьно удивляет получение Вами ожидаемого результата, и мне действительно интересен план запроса при котором это происходит. Это сообщение отредактировал(а) Zloxa - 29.9.2010, 13:13 -------------------- Достоверно известно, что 89% людей доверяют статистике взятой с потолка |
|||
|
||||
| Akina |
|
||||
|
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 45 Всего: 454 |
KOHCEPBATOP
Объясните мне различие между
и
Я понял бы, будь там 1%, 10% или ещё что... но наличие цифры 100% полностью выбивает меня из колеи - я не могу постичь всю глубину Вашей мысли. PS. Почему-то вспоминается термин "индусский код". -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
||||
|
|||||
| Zloxa |
|
|||
|
Чо? ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3473 Регистрация: 12.9.2008 Репутация: 53 Всего: 161 |
Он надестся получить в результате distinct выборку, отсортированную по полю, не перечисленному в списке select. -------------------- Достоверно известно, что 89% людей доверяют статистике взятой с потолка |
|||
|
||||
| Akina |
|
|||
|
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 45 Всего: 454 |
-------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
| Zloxa |
|
|||
|
Чо? ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3473 Регистрация: 12.9.2008 Репутация: 53 Всего: 161 |
в принципе результат желаемый можно получить, но не используя при том дистинкт.
Но вопрос ведь был не о том, вопорс был "почему order by в подзапросе с TOP можно". Это сообщение отредактировал(а) Zloxa - 29.9.2010, 20:25 -------------------- Достоверно известно, что 89% людей доверяют статистике взятой с потолка |
|||
|
||||
| KOHCEPBATOP |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 44 Регистрация: 21.4.2010 Репутация: нет Всего: 1 |
Переделал запрос поменяв местами distinct и order by. Хотя вопрос был не в этом. Фишку про "order by" и "top 100 percent", во вложенном запросе понял.
P.S. Zloxa, Akina, не ругайтесь сильно. Не все сразу начинают писать рабочий код. |
|||
|
||||
| Akina |
|
|||
|
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 45 Всего: 454 |
Я не ругаюсь... просто "дай мне первые сто процентов" - уж больно забавно.
-------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
| Zloxa |
|
|||
|
Чо? ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3473 Регистрация: 12.9.2008 Репутация: 53 Всего: 161 |
-------------------- Достоверно известно, что 89% людей доверяют статистике взятой с потолка |
|||
|
||||
| KOHCEPBATOP |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 44 Регистрация: 21.4.2010 Репутация: нет Всего: 1 |
В контексте данной темы - ни на сколько. В плане получения результата - на 100 percent. Я изучаю SQL, поэтому хочу въехать в логику запросов. А совет добавить "top 100 percent" выбило меня из колеи. В общем понял, что лучше переделать запрос, чем пользоваться таким извратом. А просить других написать правильный запрос не лучший способ обучения. |
|||
|
||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Составление SQL-запросов | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |