Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности

Новые сообщения [новые:0]
Дайджест
Горячие темы
Избранное [новые:0]
Форумы
Пользователи
Статистика
Статистика нагрузки
Мод. лог
Поиск
|
|
06.08.2001, 16:50
|
|||
|---|---|---|---|
|
|||
Переменная и SELECT ????????????? |
|||
|
#18+
Тут наткнулся на непонятное мне поведение SQL - сервер'a (проверял только для 2000). Код: \ndeclare @x int select @x = x from (select 1 x union select 2 x) t print @x Результат: 2 Подзапрос возвращает две строки, а ошибки нет (молчит как рыба об лед!). Примечателен тот же самый код: \ndeclare @x int select @x = x from (select 2 x union select 1 x) t print @x Результат: 2!!!!!!!!!!!!!! По ходу берется максимум... А теперь другая запись: \ndeclare @x int set @x = (select x from (select 1 x union select 2 x) t) Результат: Server: Msg 512, Level 16, State 1, Line 13 Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression. Ваши комментарии [_________________________] P.S. У кого есть седьмой SQL, проверьте, пожалуйста на нем... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
07.08.2001, 00:52
|
|||
|---|---|---|---|
|
|||
Переменная и SELECT ????????????? |
|||
|
#18+
set @x = может быть только одному значению select @x = последнему из запроса ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
07.08.2001, 07:31
|
|||
|---|---|---|---|
|
|||
Переменная и SELECT ????????????? |
|||
|
#18+
Это понятно, но не понятно почему последний из запроса - это максимальный элемент? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
07.08.2001, 09:10
|
|||
|---|---|---|---|
Переменная и SELECT ????????????? |
|||
|
#18+
Вы пишите такой запрос, результат которого неопределён в принципе. Гадать почему результат этого запроса именно такой - архиглупое занятие. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
07.08.2001, 09:44
|
|||
|---|---|---|---|
Переменная и SELECT ????????????? |
|||
|
#18+
SergSuper, похоже, поторопился с ответом, до конца не вникнув. Он очень часто использует прием, связанный с использованным в первом примере присваиванием и хорошо знает, как работают подобные конструкции. А именно - присваивание производится многократно - по количеству записей в выборке. Поскольку записей две, то сначала @x присваивается значение 1, потом 2. После завершения скрипта @x содержит значение последней записи. А попробуй так: set @x=0 select @x = @x + x from (select 1 x union select 2 x) t print @x Получишь сумму, не используя агрегатную функцию. Если ты хочешь присвоить переменной ОДНО значение, то делается это так: set @x=(select...) или так: select @x=(select...) Что, собсно, и сделано во втором примере, в котором ты и получаешь закономерное сообщение об ошибке. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
07.08.2001, 10:26
|
|||
|---|---|---|---|
|
|||
Переменная и SELECT ????????????? |
|||
|
#18+
Thanks 2 Garya за ясный ответ. Только, похоже, я совсем тупой. Если @x присваивается для каждой строки, а на выходе в @x - результат последнего присваивания, то получается, что порядок следования строк в select 1 x union select 2 x и select 2 x union select 1 x одинаковый. А я всегда думал, что в подобном случае строки идут в том же порядке, как и в запросе... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
07.08.2001, 10:39
|
|||
|---|---|---|---|
|
|||
Переменная и SELECT ????????????? |
|||
|
#18+
UNION сортирует и делает уникальными записи в таблицах ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
07.08.2001, 11:31
|
|||
|---|---|---|---|
|
|||
Переменная и SELECT ????????????? |
|||
|
#18+
Не понял мысли относительно сортировки, которую якобы выполняет UNION. По каким полям он сортирует (по всем выбираемым?)? \ncreate table #t (id int primary key) insert #t values (2) insert #t values (1) select * from #t union all select * from #t drop table #t Результат: id -- 1 2 1 2 Если сделать запрос select * from #t ,то результатом будет 1 2 , что логично, т.к. для #t создается CLUSTERED индекс. Если убрать из описания таблицы primary key, то \nselect * from #t union all select * from #t вернет id -- 2 1 2 1 , то есть строки идут в порядке добавления. Тогда, по логике, можно предположить, что \nselect 1 x union select 2 x создает CLUSTERED index. Так что-ли? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
07.08.2001, 12:41
|
|||
|---|---|---|---|
Переменная и SELECT ????????????? |
|||
|
#18+
2 MessMaker Тут хоть и Garya обвинил, меня что я не вник до конца, но я с ним не согласен и поясню свою точку зрения. На мой взгляд(просьба не обижаться) Вы занимаетесь ерундой. Такие конструкции(с присваиванием), которые вы пишите, смысла использовать нет. Да, я (как выразился Garya) "использую(но очень редко) прием, связанный с использованным в первом примере присваиванием", но я знаю, что этот приём "на грани" - порядок в нём гарантировать нельзя, а при использованиии ORDER BY присваивание может быть выполнено только один раз. Почему это происходит - даже не задумывался. Что касается Ваших изысканий - если нет order by, то порядок записей не определён и они будут выводиться в удобном для SQL-сервера порядке, о котором знают наверное только его разработчики(и то не уверен). Остаётся только смириться с этим. Или писать order by. С приветом Сергей ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
07.08.2001, 14:27
|
|||
|---|---|---|---|
|
|||
Переменная и SELECT ????????????? |
|||
|
#18+
Я обычно пишу set @x = (select ...). Но если надо выбрать несколько полей в несколько переменных? Приходится использовать select @x = ,... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
08.08.2001, 05:32
|
|||
|---|---|---|---|
|
|||
Переменная и SELECT ????????????? |
|||
|
#18+
Конечно же есть разница между union и union all!!!!!!!!!!!!!!!!!!!!!!!! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|

start [/forum/topic.php?fid=46&tablet=1&tid=1825949]: |
0ms |
get settings: |
8ms |
get forum list: |
17ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
59ms |
get topic data: |
14ms |
get forum data: |
4ms |
get page messages: |
51ms |
get tp. blocked users: |
1ms |
| others: | 264ms |
| total: | 426ms |

| 0 / 0 |
