powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Хитрый запрос
10 сообщений из 10, страница 1 из 1
Хитрый запрос
    #32023000
Alexander_Chepack
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Возник у меня такой вот вопрос:

В 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.
...
Рейтинг: 0 / 0
Хитрый запрос
    #32023001
MadDog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так подходит?

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.
...
Рейтинг: 0 / 0
Хитрый запрос
    #32023002
Michael
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Попробуйте

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

у меня вроде всё получилось
...
Рейтинг: 0 / 0
Хитрый запрос
    #32023006
Alexander_Chepack
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
To MadDog:

Да я так пробовал - проблема в том, что производительность очень плохая - сначала выполняется подзапрос для SourceTbl, и только потом к результату применяются условия join'на - при сотнях тысяч записей в SourceTbl и просто сотнях в DestTbl производительность ужасная. Проверял только на семерке - но мне для семерки и надо.

Michael:

У вас это работало? На семерке при попытке использовать ссылку на внешнюю таблицу из subquery использумого в FROM выдается ошибка (SQL Server 7 & SP 1). На SQL 2K не проверял...
...
Рейтинг: 0 / 0
Хитрый запрос
    #32023007
MadDog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Alexander_Chepack:
"Т.е. одним Update присвоить значения нескольким полям, причем значения вычисляются в correlated sub-query c помощью
агрегатных функций. Можно ли то же самое проделать в MS SQL Server?"

Другого не спрашивали.

Хотя я, конечно, видел что "можно", но "долго", поэтому и сказал, что "При необходимости во внутреннем подзапросе можно прицепить join-ом table1". Попробуйте внутренний запрос оформить в виде join-а table1 и table2.
...
Рейтинг: 0 / 0
Хитрый запрос
    #32023011
3.14_d'or
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MagDog прав. Уважуха.ю
...
Рейтинг: 0 / 0
Хитрый запрос
    #32023012
Michael
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
To Alexander_Chepack
Вы знаете я попробовал и в семёрке у меня всё получилось. Может быть дело всё же не в версии.
...
Рейтинг: 0 / 0
Хитрый запрос
    #32023014
Фотография SergSuper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я бы это делал через временную таблицу

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

скорее всего так будет работать быстрее даже если обновляется только один столбец
...
Рейтинг: 0 / 0
Хитрый запрос
    #32023024
Alexander_Chepack
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Michael:

Ну ничего не понимаю - я не первый раз пробую использовать subqueries в from и никогда мне не удавалось
сослаться на внешнюю таблицу. Скриптец не кинете по e-mail - включая создание таблиц?
chepackav@bigfoot.com
...
Рейтинг: 0 / 0
Хитрый запрос
    #32023026
Фотография Garya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Уважаемый 3.14_d'or! Себя Вы можете не уважать сколько Вам угодно. Но уважайте аудиторию. И примите особенно к сведению, что на данный форум также заходят представительницы слабого пола. Либо читайте молча, либо смените ник.
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Хитрый запрос
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]