Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Почему запрос на агрегацию строк с for xml так странно работает?
|
|||
|---|---|---|---|
|
#18+
Собственно, текст запроса вот: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. С закомментированнным for xml path('') он отрабатывает ожидаемо: Код: plaintext 1. 2. 3. 4. 5. 6. 7. Код: plaintext 1. 2. 3. 4. 5. Почему??? Воспроизводится и на 2008R2, и на 2016SP1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2018, 08:29 |
|
||
|
Почему запрос на агрегацию строк с for xml так странно работает?
|
|||
|---|---|---|---|
|
#18+
uaggster, что именно тебя удивляет? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2018, 08:32 |
|
||
|
Почему запрос на агрегацию строк с for xml так странно работает?
|
|||
|---|---|---|---|
|
#18+
uaggster, если что, кури в сторону агрегатных запросов без фразы GROUP BY.... сравни результат вывода: Код: sql 1. 2. в первом случае ты получаешь результирующий набор в одну строку с ПУСТЫМ ЗНАЧЕНИЕМ. во втором - ПУСТОЕ МНОЖЕСТВО, не содержание ни одной строки. Чувствуешь разницу? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2018, 08:44 |
|
||
|
Почему запрос на агрегацию строк с for xml так странно работает?
|
|||
|---|---|---|---|
|
#18+
uaggster, ну, если вдруг, ты не понял аналогии, то for xml path('') - это, как бы, "аналог" агрегатного подзапроса без кляузы GROPU BY. То есть, он всегда вернет "одну строку" на выходе, вне зависимости от ложности или истинности условий соединения со внешней таблицей... Другое дело, что эта "одна строка" будет либо содержать результат конкатенации всех строк, удовлетворяющих условию WHERE, либо "пустное значение", если условия WHERE окажется "ложным" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2018, 09:09 |
|
||
|
Почему запрос на агрегацию строк с for xml так странно работает?
|
|||
|---|---|---|---|
|
#18+
Добрый Э - Эхuaggster, что именно тебя удивляет? Меня удивляет, что (вроде бы) если cross apply не вернул ни одной строки, значит и строка, с которой происходит соединение, и результат функции (в данном случае - подчиненный селект) - в выборку попасть не должны. Вроде бы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2018, 09:12 |
|
||
|
Почему запрос на агрегацию строк с for xml так странно работает?
|
|||
|---|---|---|---|
|
#18+
Добрый Э - Эхuaggster, ну, если вдруг, ты не понял аналогии, то for xml path('') - это, как бы, "аналог" агрегатного подзапроса без кляузы GROPU BY. То есть, он всегда вернет "одну строку" на выходе, вне зависимости от ложности или истинности условий соединения со внешней таблицей... Другое дело, что эта "одна строка" будет либо содержать результат конкатенации всех строк, удовлетворяющих условию WHERE, либо "пустное значение", если условия WHERE окажется "ложным" А почему это так??? Чем диктуется такое поведение? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2018, 09:14 |
|
||
|
Почему запрос на агрегацию строк с for xml так странно работает?
|
|||
|---|---|---|---|
|
#18+
uaggster, ещё раз говорю - проделай эксперимент с агрегатным подзапросом без GROUP BY. Результат будет аналогичный, потому что агрегатный запрос (читай с for xml) без group by - всегда возвращает ровно одну строку, вне зависимости от числа строк, попавших в обработку... Касательно apply - он при cross нотации возвращает в итоговый датасет строки, для которых подзапрос оказался "непустым множеством". так вот, твой for xml делает результирующий датасет подзапроса - "непустым"... потому строки из основной таблицы и выталкиваются в итоговый результат... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2018, 09:16 |
|
||
|
Почему запрос на агрегацию строк с for xml так странно работает?
|
|||
|---|---|---|---|
|
#18+
uaggsterА почему это так??? Чем диктуется такое поведение?документацией и стандартом ANSI-SQL ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2018, 09:17 |
|
||
|
Почему запрос на агрегацию строк с for xml так странно работает?
|
|||
|---|---|---|---|
|
#18+
Добрый Э - Эхтак вот, твой for xml делает результирующий датасет подзапроса - "непустым"... потому строки из основной таблицы и выталкиваются в итоговый результат... Выделенное курсивом - разумеется, понятно. Непонятное - выделенное жирным. Почему for xml - делает результат датасета - непустым? Я понимаю, что это диктуется стандартом (если б это можно было списать на баг, это не воспроизводилось бы на разных версиях), не не понимаю, где это посмотреть! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2018, 10:52 |
|
||
|
|

start [/forum/topic.php?fid=46&gotonew=1&tid=1690347]: |
0ms |
get settings: |
9ms |
get forum list: |
19ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
40ms |
get topic data: |
14ms |
get first new msg: |
8ms |
get forum data: |
4ms |
get page messages: |
55ms |
get tp. blocked users: |
2ms |
| others: | 205ms |
| total: | 364ms |

| 0 / 0 |
