[英]Lost in DB2 update statement
我尝试使用另一个表更新一个表。 我收到错误号407。它说我尝试在不可空列中插入null。
我在my_TIMESTAMP列中检查了该列。 通常,它不能为null。 因为我用current timestamp
更新了column。 它应该产生一个时间戳。 问题出在哪儿?
UPDATE table1 mytable
SET (
my_PROCESS,
my_TIMESTAMP,
col3,
COL5
) = (
SELECT
(select PROCESSNAME from table3),
current timestamp,
COL3,
COL5
FROM table2 mytable2
WHERE mytable.COL4 = mytable2.COL4
)
WHERE EXISTS (
SELECT 'x'
FROM table1 mytable1, table2 mytable21
WHERE mytable1.COL4 = mytable21.COL4
);
由于无法访问数据,因此回答并不容易。 但是您是否尝试过使用MERGE INTO这样的解决方法? 在这种情况下,您可以通过在USING中仅执行语句来检查合并的数据。 当然,您可以在此语句中添加谓词以使行集更短。
MERGE INTO TABLE1 AS T1
USING (SELECT T3.PROCESSNAME_1 AS MY_PROCESS, T2.COL3, T2.COL4, T3.COL5
FROM TABLE3 T3, TABLE2 T2) AS Q1
ON T1.COL4 = Q1.COL4
WHEN MATCHED THEN
UPDATE SET (MY_PROCESS, MY_TIMESTAMP, COL3, COL5) =
(Q1.MY_PROCESS, CURRENT TIMESTAMP, Q1.COL3, Q1.COL5)
我将where exists
条件替换为where exists
where ... IN
更改了where条件。
UPDATE table1 mytable
SET (
my_PROCESS,
my_TIMESTAMP,
col3,
COL5
) = (
SELECT
(select PROCESSNAME from table3),
current timestamp,
COL3,
COL5
FROM table2 mytable2
WHERE mytable.COL4 = mytable2.COL4
)
WHERE mytable.id IN (
SELECT mytable1.id
FROM table1 mytable1, table2 mytable21
WHERE mytable1.COL4 = mytable21.COL4
);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.