Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Хитрый запрос
|
|||
|---|---|---|---|
|
#18+
Возник у меня такой вот вопрос: В Oracle вроде бы можно использовать такую конструкцию (не ручаюсь за синтаксис): update DestTbl set (Column01,Column02,Column03) = (select Max(Column01),Max(Column02),Max(Column03) from SourceTbl where SourceTbl.FKColumn=DestTbl.PKColumn) Т.е. одним Update присвоить значения нескольким полям, причем значения вычисляются в correlated sub-query c помощью агрегатных функций. Можно ли то же самое проделать в MS SQL Server? Пока приходится использовать несколько Updates (по числу изменяемых колонок) - непрятно одни и те же действия повторять несколько раз. Меня интересуют решения как для семерки, так и для SQL 2K. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.02.2002, 13:41 |
|
||
|
Хитрый запрос
|
|||
|---|---|---|---|
|
#18+
Так подходит? update table1 set f1 = t2.f1, f2 = t2. f2, .... from table1 t1 join ( select id, f1 = sum(f1), f2 = sum(f2), ... from table2 group by Id ) t2 on t1.id = t2.id При необходимости во внутреннем подзапросе можно прицепить join-ом table1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.02.2002, 14:29 |
|
||
|
Хитрый запрос
|
|||
|---|---|---|---|
|
#18+
Попробуйте update DestTbl set Column1 = T.Column1, Column2 = T.Column2, Column3 = T.Column3 from ( select PKColumn, max( SourceTbl.Column1 ) as Column1, max( SourceTbl.Column2 ) as Column2, max( SourceTbl.Column3 ) as Column3 from SourceTbl, DestTbl where SourceTbl.FKColumn = DestTbl.PKColumn group by PKColumn ) as T where DestTbl.PKColumn = T.PKColumn у меня вроде всё получилось ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.02.2002, 14:38 |
|
||
|
Хитрый запрос
|
|||
|---|---|---|---|
|
#18+
To MadDog: Да я так пробовал - проблема в том, что производительность очень плохая - сначала выполняется подзапрос для SourceTbl, и только потом к результату применяются условия join'на - при сотнях тысяч записей в SourceTbl и просто сотнях в DestTbl производительность ужасная. Проверял только на семерке - но мне для семерки и надо. Michael: У вас это работало? На семерке при попытке использовать ссылку на внешнюю таблицу из subquery использумого в FROM выдается ошибка (SQL Server 7 & SP 1). На SQL 2K не проверял... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.02.2002, 14:54 |
|
||
|
Хитрый запрос
|
|||
|---|---|---|---|
|
#18+
2 Alexander_Chepack: "Т.е. одним Update присвоить значения нескольким полям, причем значения вычисляются в correlated sub-query c помощью агрегатных функций. Можно ли то же самое проделать в MS SQL Server?" Другого не спрашивали. Хотя я, конечно, видел что "можно", но "долго", поэтому и сказал, что "При необходимости во внутреннем подзапросе можно прицепить join-ом table1". Попробуйте внутренний запрос оформить в виде join-а table1 и table2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.02.2002, 15:09 |
|
||
|
Хитрый запрос
|
|||
|---|---|---|---|
|
#18+
MagDog прав. Уважуха.ю ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.02.2002, 15:38 |
|
||
|
Хитрый запрос
|
|||
|---|---|---|---|
|
#18+
To Alexander_Chepack Вы знаете я попробовал и в семёрке у меня всё получилось. Может быть дело всё же не в версии. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.02.2002, 15:40 |
|
||
|
Хитрый запрос
|
|||
|---|---|---|---|
|
#18+
Я бы это делал через временную таблицу select FKColumn, Max(Column01) c1,Max(Column02) c2,Max(Column03) c3 into #t from SourceTbl group by FKColumn update DestTbl set Column01=c1, Column02=c2, Column03=c3 from #t,DestTbl where FKColumn=DestTbl скорее всего так будет работать быстрее даже если обновляется только один столбец ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.02.2002, 15:43 |
|
||
|
Хитрый запрос
|
|||
|---|---|---|---|
|
#18+
Michael: Ну ничего не понимаю - я не первый раз пробую использовать subqueries в from и никогда мне не удавалось сослаться на внешнюю таблицу. Скриптец не кинете по e-mail - включая создание таблиц? chepackav@bigfoot.com ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.02.2002, 17:23 |
|
||
|
Хитрый запрос
|
|||
|---|---|---|---|
|
#18+
Уважаемый 3.14_d'or! Себя Вы можете не уважать сколько Вам угодно. Но уважайте аудиторию. И примите особенно к сведению, что на данный форум также заходят представительницы слабого пола. Либо читайте молча, либо смените ник. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.02.2002, 17:36 |
|
||
|
|

start [/forum/topic.php?fid=46&msg=32023014&tid=1823899]: |
0ms |
get settings: |
6ms |
get forum list: |
16ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
147ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
54ms |
get tp. blocked users: |
1ms |
| others: | 212ms |
| total: | 454ms |

| 0 / 0 |
