如何使用连接执行sql update语句?

时间:2017-11-08 22:44:56

标签: sql sybase sqlanywhere

我正在尝试使用另一个表中另一列的总和来执行更新语句。我想要

customer_ar.current_bal to = sum(ar_transaction.current_balance)

作为测试,我运行此操作以使5个客户的customer_ar.current_bal = 100:

update customer_ar
set current_bal=100
where customer_id in (1502,1329,3096,1516,3605);

接下来我跑了这个:

update customer_ar C
join ar_transaction T on T.customer_id=C.customer_id
set current_bal =
(select sum(current_balance)
from ar_transaction
where C.customer_id =T.customer_id)
where C.customer_id in (1502,1329,3096,1516,3605);

我得到的结果是所有人的余额变为213823.85。对于每个客户,实际的当前余额应该是不同的,并且在50到100之间。

我可以做一个子查询,如果我一次只做一个,它会起作用,但是我试图看看是否有办法让它一次完成所有这些。你看到我做错了吗?

2 个答案:

答案 0 :(得分:0)

如果您使用的是sql-server,则可以使用此脚本。

leftHalfScreen = Region(0, 0, getScreen().getBounds().width/2, getScreen().getBounds().height)
leftHalfScreen.highlight(1)

答案 1 :(得分:-2)

我认为您需要对子查询中的行进行分组,以便为​​每个客户的事务构建总和。

也许这样的事情(只是为了得到这个想法):

update customer_ar p
set current_bal = trans.sumBal
from customer_ar c
join (select customer_id, sum(current_bal) as sumBal from ar_transaction group by customer_id) trans on c.customer_id = trans.customer_id
where p.customer_id = trans.customer_id;

http://sqlfiddle.com/#!17/3dd88/14

<强>更新 很抱歉发布了这个无效的SQL。我刚修好了我的榜样。