0

我有两个更新查询,都使用相同的条件来获取数据。一旦一个查询运行,该条件将不会返回任何记录。第一个查询

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 中一次更新两个表?

4

1 回答 1

1

由于您没有指定平台,我将假设 DB2 for 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
;
于 2013-12-04T16:04:17.873 回答