Обновление DB2 с запросами на соединение - PullRequest
2 голосов
/ 04 ноября 2011

Я использую DB2 для выполнения описанной ниже операции обновления.

update DATA set B_DESC=P_DESC, P_DESC=null
where B_DESC= *, P_DESC=*
(Select B_DESC,P_DESC from C_DATA) 

Ниже действительно возможно, но поскольку в этом подзапросе участвуют сложные объединения, не рекомендуется использовать, как показано ниже

update DATA set B_DESC=P_DESC, P_DESC=null
where B_DESC= (Select B_DESC from C_DATA), P_DESC=(Select P_DESC from C_DATA)

Мне нужно обновить таблицу DATA, но B_DESC и P_DESC я должен извлечь ее из таблицы C_DATA и использовать в запросе UPDATE.

Пожалуйста, дайте мне знать, как это сделать.Если возможно, это должен быть один запрос.

Заранее спасибо.

Ответы [ 2 ]

6 голосов
/ 20 мая 2012

Используйте запрос слияния для обновления таблицы вместо объединения.DB2 не принимает объединение в запросе на обновление для этой цели, вы должны использовать слияние:

MERGE INTO TABLE_NAME1 A 
    USING (SELECT  COL1, COL2  FROM TABLE_NAME2) B
    ON A.COL1 = B.COL2
    WHEN MATCHED AND A.COL1 = B.COL2
    THEN UPDATE SET A.COL1 = B.COL2;
0 голосов
/ 04 ноября 2011

Ваш первый запрос не работает? Я не знаком с разделителями-запятыми частей предложения WHERE (это недопустимо в моей версии DB2 - действительно ли это часть синтаксиса?).

Обычно, когда мне нужно выполнить эти типы запросов на обновление, я использую предложение EXISTS, например:

UPDATE data as a SET b_desc = p_desc, p_desc = null
WHERE EXISTS (SELECT '1'
              FROM c_data as b
              WHERE b.b_desc = a.b_desc
              AND b.p_desc = a.p_desc)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...