我这里有这个查询,因为返回的行太多而返回错误:
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
或其他东西,但我想听听想法或知道一个正确的方法来做到这一点。
答案 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
所有行查找相应的值从另一张桌子。