我在文本文件中有一个 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);
但这不起作用。任何想法?
您不能只在 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。