Обновите 2 таблицы вместе, которые используются для получения контента
У меня есть два запроса на обновление, оба используют одно и то же условие для получения данных. После выполнения одного запроса условие не будет связываться с возвратом какой-либо записи. Первый запрос
UPDATE catentdesc
SET PUBLISHED = 0
WHERE CATENTRY_ID IN (
SELECT CATENTRY.CATENTRY_ID
FROM CATENTDESC,
CATENTRY
WHERE CATENTRY.catenttype_id = 'ProductBean'
AND CATENTDESC.CATENTRY_ID = CATENTRY.CATENTRY_ID
AND catentry.buyable = 1
AND catentdesc.published = 1
AND CATENTRY.CATENTRY_ID IN (
SELECT CATENTRY_ID
FROM CATGPENREL
WHERE CATALOG_ID = 10001
)
AND catentry.markfordelete = 0 minus
SELECT CATENTRY.CATENTRY_ID
FROM CATENTDESC,
CATENTRY
WHERE CATENTRY.catenttype_id = 'ProductBean'
AND CATENTDESC.CATENTRY_ID = CATENTRY.CATENTRY_ID
AND catentry.buyable = 1
AND catentdesc.published = 1
AND CATENTRY.CATENTRY_ID IN (
SELECT CATENTRY_ID
FROM CATGPENREL
WHERE CATALOG_ID = 10051
)
AND catentry.markfordelete = 0
)
Второй запрос
UPDATE catentry
SET CATENTRY.BUYABLE = 0
WHERE CATENTRY_ID IN (
SELECT CATENTRY.CATENTRY_ID
FROM CATENTDESC,
CATENTRY
WHERE CATENTRY.catenttype_id = 'ProductBean'
AND CATENTDESC.CATENTRY_ID = CATENTRY.CATENTRY_ID
AND catentry.buyable = 1
AND catentdesc.published = 1
AND CATENTRY.CATENTRY_ID IN (
SELECT CATENTRY_ID
FROM CATGPENREL
WHERE CATALOG_ID = 10001
)
AND catentry.markfordelete = 0 minus
SELECT CATENTRY.CATENTRY_ID
FROM CATENTDESC,
CATENTRY
WHERE CATENTRY.catenttype_id = 'ProductBean'
AND CATENTDESC.CATENTRY_ID = CATENTRY.CATENTRY_ID
AND catentry.buyable = 1
AND catentdesc.published = 1
AND CATENTRY.CATENTRY_ID IN (
SELECT CATENTRY_ID
FROM CATGPENREL
WHERE CATALOG_ID = 10051
)
AND catentry.markfordelete = 0
)
Проблема в том, что мне нужно обновить catentry и catentdesc, но если один обновит другой, я не смогу обновить, потому что запрос условия не вернет никакого результата.
Это возможно с помощью процедуры, сохраняя результат и обновляя таблицу. Но я ищу более простой способ, может кто-нибудь, пожалуйста, помогите мне.
Есть ли способ обновить обе таблицы одновременно в DB2?
1 ответ
Поскольку вы не указываете платформу, я собираюсь предположить, что DB2 для Linux/Unix/Windows. Если это не правильно, он все еще может работать на других платформах, но я не уверен.
Вы можете объявить временную таблицу и сохранить результаты для использования в своих обновлениях позже.
Кроме того, я думаю, что мне удалось упростить некоторые критерии запроса с помощью LEFT JOIN
, Похоже, вы принимаете все CATENTRIES
которые из каталога 10001
и затем удаляет записи (с теми же критериями), которые также существуют в 10051
, Если это так, то LEFT JOIN
ниже следует сделать то же самое. Я не могу проверить это (без примеров данных), так что вы можете проверить это самостоятельно и убедиться в результатах.:)
DECLARE GLOBAL TEMPORARY TABLE SESSION.CATENTRY AS
SELECT C.CATENTRY_ID
FROM CATENTRY C
JOIN CATENTDESC D
ON D.CATENTRY_ID = C.CATENTRY_ID
JOIN CATGPENREL G
ON G.CATENTRY_ID = C.CATENTRY_ID
LEFT JOIN CATGPENREL G2
ON G2.CATENTRY_ID = C.CATENTRY_ID
AND G2.CATALOG_ID = 10051
WHERE C.catenttype_id = 'ProductBean'
AND C.buyable = 1
AND C.markfordelete = 0
AND D.published = 1
AND G.CATALOG_ID = 10001
AND G2.CATENTRY_ID IS NULL
ON COMMIT PRESERVE ROWS
;
UPDATE catentdesc
SET PUBLISHED = 0
WHERE CATENTRY_ID IN (
WHERE CATENTRY_ID IN (
SELECT CATENTRY_ID
FROM SESSION.CATENTRY
)
;
UPDATE catentry
SET BUYABLE = 0
WHERE CATENTRY_ID IN (
SELECT CATENTRY_ID
FROM SESSION.CATENTRY
)
;
DROP TABLE SESSION.CATENTRY
;