0

我在文本文件中有一个 3k ID 的列表。我应该找到具有此类 ID 的行并更新它们。我希望能像这样工作

WITH RECORD_ID
(ID) AS (
'12345',
...
'32134')
UPDATE MY_TABLE T
SET T.NAME = REPLACE(T.NAME, X'03', '')
WHERE EXISTS (SELECT 1 FROM RECORD_ID R WHERE R.ID = T.ID);

但这不起作用。任何想法?

4

1 回答 1

0

您不能只在 DB2 中的 CTE 中有一个值列表,您必须将UNION ALL这些值放在一起:

WITH RECORD_ID (ID) AS (
    SELECT '12345' FROM SYSIBM.SYSDUMMY1 UNION ALL
    -- ...
    SELECT '32134' FROM SYSIBM.SYSDUMMY1
)
UPDATE MY_TABLE T
SET T.NAME = REPLACE(T.NAME, X'03', '')
WHERE EXISTS (SELECT 1 FROM RECORD_ID R WHERE R.ID = T.ID);

应该管用。

不过,我同意@X-Zero 的观点……似乎一个IN子句中的值列表更合适,除非您有特定的原因要使用 CTE。

于 2012-06-12T16:30:30.263 回答