powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / UPDATE с объединением
9 сообщений из 9, страница 1 из 1
UPDATE с объединением
    #35669007
mwolf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Запрос в принципе простой

В MS SQL-е это было бы так
Код: plaintext
1.
2.
3.
4.
UPDATE t1
SET t1.name = t2.name
FROM table1 t1, table t2
WHERE t1.id = t2.fk_id 

То есть мне надо проапдейтить таблицу t1 значениями из t2 при совпадении ИД

Как подобное делается в DB2?
...
Рейтинг: 0 / 0
UPDATE с объединением
    #35669059
mustaccio
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
UPDATE t1
SET t1.name = (select t2.name FROM table1 t1, table t2 WHERE t1.id = t2.fk_id)

Стандарт SQL92
...
Рейтинг: 0 / 0
UPDATE с объединением
    #35669061
mustaccio
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mustaccio,

Ошибочка вышла

Код: plaintext
1.
2.
UPDATE t1
SET t1.name = (select t2.name FROM table t2 WHERE t1.id = t2.fk_id)
конечно же.
...
Рейтинг: 0 / 0
UPDATE с объединением
    #35669118
mwolf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mustacciomustaccio,

Ошибочка вышла

Код: plaintext
1.
2.
UPDATE t1
SET t1.name = (select t2.name FROM table t2 WHERE t1.id = t2.fk_id)
конечно же.

Оно, конечно, да, но есть один момент.
Если делать джоин как в моём примере, то в таблице проапдейтится 10 строк из 10 000.
В вашем примере база будет пытаться проапдейтить все 10к строк, постоянно натыкаясь на отсутствие соответствий.

Так что хотелось бы этот момент обойти. Или ДБ2 достаточно умная и, чтоб соптимизировать этот запрос?
...
Рейтинг: 0 / 0
UPDATE с объединением
    #35669129
mustaccio
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Запрос будет делать то, что в нем написано, и оптимизация тут вовсе ни при чем. Если вам нужно выбрать записи в Т1 по какому-то критерию, этот критерий должен быть указан в кляузе WHERE. Согласно тому же стандарту.

Код: plaintext
1.
2.
3.
UPDATE t1
SET t1.name = (select t2.name FROM table t2 WHERE t1.id = t2.fk_id)
where exists (select  1  FROM table t2 WHERE t1.id = t2.fk_id)
...
Рейтинг: 0 / 0
UPDATE с объединением
    #35669473
TORT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну если без стандартов, то оператор merge поможет...
...
Рейтинг: 0 / 0
UPDATE с объединением
    #35671690
mwolf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TORTНу если без стандартов, то оператор merge поможет...

О!
Кажется оно
Код: plaintext
1.
2.
3.
4.
5.
MERGE INTO table1 t1
  USING table t2
  ON t1.id = t2.fk_id 
  WHEN MATCHED THEN
     UPDATE SET t1.name = t2.name

Я правильно понимаю происходящее?

2 mustaccio
>>Запрос будет делать то, что в нем написано, и оптимизация тут вовсе ни при чем
Оно, конечно, так, но когда пишешь что-то реальное, то оптимизация становится очень даже причём.
С ДБ2 я работаю немного, поэтому оптимизатор этой СУБД меня очень даже интересует.
Оптимизатор MS SQL вполне мог начать делать по 2 запроса на каждую из строк в Т1 в вашем запросе
А вот мой запрос, который я приводил в качестве примера, отрабатывает хорошо.
...
Рейтинг: 0 / 0
UPDATE с объединением
    #35672117
TORT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
По-моему для Вашей задачи merge самое то... Там правда есть различные ограничения по его использованию, ну это Вам лучше в доку глянуть....
...
Рейтинг: 0 / 0
UPDATE с объединением
    #35672327
Dune
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MERGE INTO table1 t1
USING table t2
ON t1.id = t2.fk_id
WHEN MATCHED THEN
UPDATE SET t1.name = t2.name
ELSE IGNORE;
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / UPDATE с объединением
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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