0

テキストファイルに3kIDのリストがあります。そのような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 に答える