DB2 z / OS按列表更新

时间:2012-06-12 15:32:58

标签: sql db2 zos

我在文本文件中有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);

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

1 个答案:

答案 0 :(得分: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。