我将程序从sybase导出到netezza,在某些程序中有一些查询不断给我“更新已取消:尝试使用多个连接行的值更新目标行” 两个数据库上的数据和表结构是相同的,这个查询涉及Sybase但不涉及Netezza
UPDATE table1 t1 SET t1.column1=t2.column1
FROM table2 t2
WHERE t1.column2=t2.column2;
如果数据和查询相同,会导致此错误的原因是什么?
答案 0 :(得分:0)
这是因为table1中至少有一行在表2中连接了至少2行,这导致混淆哪个值应该以column1结束。
例如:
select * from table1;
COLUMN1 | COLUMN2
---------+---------
1 | 1
(1 row)
select * from table2;
COLUMN1 | COLUMN2
---------+---------
3 | 1
2 | 1
(2 rows)
UPDATE table1 t1 SET t1.column1=t2.column1
FROM table2 t2
WHERE t1.column2=t2.column2;
ERROR: Update canceled: attempt to update a target row with values from multiple join rows
不清楚table1中的column1是否应设置为2或3,因此会给出错误并回滚事务。
然而,我无法说明为什么sybase允许这样做。