存储过程中从一个表到另一个表的Netezza更新错误

问题描述 投票:0回答:2

有时通过连接两个表进行更新时,出现以下错误:

请在表'X'上添加修饰符,已超出最大表版本。

是否有避免这种问题的方法?我正在使用存储过程,不能使用修饰...

这里是我要做的事的一个例子:

UPDATE Table_1 t1
SET Var_1 = (CASE WHEN  t1.Var_1 = 0 THEN 0 ELSE t2.Var_1 END)
FROM Table_2 t2 
WHERE t1.id =t2.id AND t1.Date = LAST_DAY(ADD_MONTHS(t2.Date, -1));

我的两个表的记录不超过20,000。我已经查看过此帖子:

Netezza UPDATE from one table to another

但是它不能解决我得到的错误...

关于如何使用从一个表到另一个表的更新来解决此类问题的任何想法?

提前感谢...

sql join sql-update netezza
2个回答
1
投票

您可以将查询简化为:

UPDATE Table_1 t1
    SET Var_1 = t2.Var_1 
    FROM Table_2 t2 
    WHERE t1.id = t2.id AND
          t1.Var_1 <> 0 AND
          t1.Var_1 <> t2.Var_1
          t1.Date = LAST_DAY(ADD_MONTHS(t2.Date, -1)) ;

这可能会或可能不会解决资源问题,但应导致更新的行减少。


1
投票

导致错误的原因不是update语句,但是表已经更改了很多次,现在是时候在表上运行GROOM VERSIONS语句了。

请查看此“ enzee社区”条目,以获取更多详细信息,包括如何识别以这种方式“修复”所需的所有表格-尽快进行,而不是稍后!

https://www.ibm.com/developerworks/community/forums/html/topic?id=9c005573-d620-481c-9c62-490af78de4c9

© www.soinside.com 2019 - 2024. All rights reserved.