Sybase到Netezza - 尝试使用多个连接行中的值更新目标行

时间:2015-01-09 15:54:24

标签: sql sybase migrate netezza

我将程序从sybase导出到netezza,在某些程序中有一些查询不断给我“更新已取消:尝试使用多个连接行的值更新目标行” 两个数据库上的数据和表结构是相同的,这个查询涉及Sybase但不涉及Netezza

UPDATE table1 t1 SET t1.column1=t2.column1
FROM table2 t2
WHERE t1.column2=t2.column2;

如果数据和查询相同,会导致此错误的原因是什么?

1 个答案:

答案 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允许这样做。