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

В 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
21.11.2008, 19:41
    #35669059
mustaccio
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
UPDATE с объединением
Код: 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
21.11.2008, 19:42
    #35669061
mustaccio
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
UPDATE с объединением
mustaccio,

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

Код: plaintext
1.
2.
UPDATE t1
SET t1.name = (select t2.name FROM table t2 WHERE t1.id = t2.fk_id)
конечно же.
...
Рейтинг: 0 / 0
21.11.2008, 20:31
    #35669118
mwolf
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
UPDATE с объединением
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
21.11.2008, 20:42
    #35669129
mustaccio
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
UPDATE с объединением
Запрос будет делать то, что в нем написано, и оптимизация тут вовсе ни при чем. Если вам нужно выбрать записи в Т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
22.11.2008, 11:40
    #35669473
TORT
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
UPDATE с объединением
Ну если без стандартов, то оператор merge поможет...
...
Рейтинг: 0 / 0
24.11.2008, 14:18
    #35671690
mwolf
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
UPDATE с объединением
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
24.11.2008, 16:28
    #35672117
TORT
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
UPDATE с объединением
По-моему для Вашей задачи merge самое то... Там правда есть различные ограничения по его использованию, ну это Вам лучше в доку глянуть....
...
Рейтинг: 0 / 0
24.11.2008, 17:24
    #35672327
Dune
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
UPDATE с объединением
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
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / UPDATE с объединением / 9 сообщений из 9, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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