更新表中的每一行

时间:2016-03-09 03:17:41

标签: postgresql sql-update

我这里有这个查询,因为返回的行太多而返回错误:

UPDATE tmp_rsl2 SET comm_percent=( SELECT c2.comm_percent
FROM tmp_rsl2 t1 
INNER JOIN gn_salesperson g1 ON t1.sales_person=g1.sales_person
INNER JOIN comm_schema c1 ON g1.comm_schema=c1.comm_schema
INNER JOIN comm_schema_dt c2 ON c1.comm_schema_id=c2.comm_schema_id AND (t1.balance_amount::numeric <= (COALESCE(c2.value_amount,0)) );`

基本上对于comm_percent列的每一行,我想使用子查询SELECT语句更新所有这些行。我想用FOR loop或其他东西,但我想听听想法或知道一个正确的方法来做到这一点。

1 个答案:

答案 0 :(得分:2)

错误TOO_MANY_ROWS是关于为变量赋值,只能取'1'(一)值,而SELECT查询返回more than one

如果没有参考架构,很难给出SQL工作(不是说问题在于Schema),但是您需要确保分配给{的值来自comm_percent语句的{1}}仅返回1行。一个非常盲目的尝试,它可能在你的情况下如何工作(如下所示),但再次不知道模式,很难判断它是否有效。

SELECT

<强>更新

根据以下评论,已经提供了一个不相关的SQLFiddle example,它应该知道如何执行表的UPDATE tmp_rsl2 SET comm_percent = c2.comm_percent FROM gn_salesperson g1 ON INNER JOIN comm_schema c1 ON g1.comm_schema = c1.comm_schema INNER JOIN comm_schema_dt c2 ON c1.comm_schema_id = c2.comm_schema_id AND (tmp_rsl2.balance_amount::NUMERIC <= (COALESCE(c2.value_amount, 0))) WHERE tmp_rsl2.sales_person = g1.sales_person 所有行查找相应的值从另一张桌子。