求一条连接更新语句

qq707472 2009-10-19 09:27:36
select * from lm_loan ln where ln.bch_cde in (‘1’,‘2’,’3‘) and ln.loan_deva_ind='Y' and ln.loan_sts='ACTV'

update lm_ln_info li set li.Ln_Cost_Prod =Ln_Cost_Prod+(lm_loan.loan_os_prcp-TOT_PROV_AMT) where li.loan_no = 上面查出


这个语句本来应该是查询第一条sql的之后得出的多条 lmloan 记录,之后遍历lmloan 记录来执行第二条更新语句,但是现在需要改成用一条连接更新语句 对表进行更新。希望大家帮忙!
...全文
110 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
thesecretblue 2009-10-20
  • 打赏
  • 举报
回复
update lm_ln_info li set li.Ln_Cost_Prod =Ln_Cost_Prod+(lm_loan.loan_os_prcp-TOT_PROV_AMT) where exists (Select loan_no from lm_loan ln where ln.bch_cde in (‘1’,‘2’,’3‘) and ln.loan_deva_ind='Y' and ln.loan_sts='ACTV' and li.loan_no=ln.loan_no)
sjm5210 2009-10-20
  • 打赏
  • 举报
回复
同意7楼的答案
cosio 2009-10-20
  • 打赏
  • 举报
回复
update lm_ln_info li set li.Ln_Cost_Prod =Ln_Cost_Prod+(lm_loan.loan_os_prcp-TOT_PROV_AMT) where exists (Select loan_no from lm_loan ln where ln.bch_cde in (‘1’,‘2’,’3‘) and ln.loan_deva_ind='Y' and ln.loan_sts='ACTV' and li.loan_no=ln.loan_no) 
小灰狼W 2009-10-20
  • 打赏
  • 举报
回复
update lm_ln_info li set ln_cost_prod=
(select li.ln_cost_prod+ln.loan_os_prcp-ln.tot_prov_amt from lm_loan ln
where ln.bch_cde in('1','2','3') and ln.loan_deva_ind='Y' and ln.loan_sts='ACTV'
and li.loan_no=ln.loan_no)
where exists
(select 1 from lm_loan where bch_cde in('1','2','3') and loan_deva_ind='Y'
and loan_sts='ACTV' and li.loan_no=loan_no)
qq707472 2009-10-20
  • 打赏
  • 举报
回复
6楼的OK
mark620 2009-10-20
  • 打赏
  • 举报
回复
最好采用游标来做。
inthirties 2009-10-20
  • 打赏
  • 举报
回复
update lm_ln_info li set li.Ln_Cost_Prod = (select Ln_Cost_Prod +lm_loan.loan_os_prcp from lm_loan ln where ln.bch_cde in (‘1’,‘2’,’3‘) and ln.loan_deva_ind='Y' and ln.loan_sts='ACTV' and li. loan_no = lm_loan. loan_no and rownum = 1) where li.loan_no exists (select 1 from (select * from lm_loan ln where ln.bch_cde in (‘1’,‘2’,’3‘) and ln.loan_deva_ind='Y' and ln.loan_sts='ACTV'))

上面的一句忽略,被把没有符合的也更新为null了。用下面一句。
inthirties 2009-10-20
  • 打赏
  • 举报
回复
update lm_ln_info li set li.Ln_Cost_Prod = (select Ln_Cost_Prod +lm_loan.loan_os_prcp from lm_loan where ln.bch_cde in (‘1’,‘2’,’3‘) and ln.loan_deva_ind='Y' and ln.loan_sts='ACTV' and li. loan_no = lm_loan. loan_no)
小灰狼W 2009-10-20
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 qq707472 的回复:]
请大家注意了  lm_loan.loan_os_prcp  也是从第一条sql语句中查询出来的
[/Quote]看看6楼的代码
qq707472 2009-10-20
  • 打赏
  • 举报
回复
请大家注意了 lm_loan.loan_os_prcp 也是从第一条sql语句中查询出来的
碧水幽幽泉 2009-10-19
  • 打赏
  • 举报
回复
jf 同意楼上
zhangwonderful 2009-10-19
  • 打赏
  • 举报
回复
建议使用exists性能较in好。
update lm_ln_info li set li.Ln_Cost_Prod =Ln_Cost_Prod+(lm_loan.loan_os_prcp-TOT_PROV_AMT) where exists (Select loan_no from lm_loan ln where ln.bch_cde in (‘1’,‘2’,’3‘) and ln.loan_deva_ind='Y' and ln.loan_sts='ACTV' and li.loan_no=ln.loan_no)

BlueskyWide 2009-10-19
  • 打赏
  • 举报
回复
1.如果楼主数据很重要的话,不妨做一个数据备份,否则原数据会破坏。
2.先动手自已做两个表,试着在两表之间使用update语句。参考一下:http://blog.sina.com.cn/s/blog_511041a10100ah2b.html
3.应给出lm_loan,lm_ln_info两表的详细字段,以作参考之用。
amiksong 2009-10-19
  • 打赏
  • 举报
回复
update lm_ln_info li set li.Ln_Cost_Prod =Ln_Cost_Prod+(lm_loan.loan_os_prcp-TOT_PROV_AMT) where exists(select * from lm_loan ln where ln.bch_cde in (‘1’,‘2’,’3‘) and ln.loan_deva_ind='Y'  and ln.loan_sts='ACTV' and ln.loan_no=li.loan_no);
SQL77 2009-10-19
  • 打赏
  • 举报
回复
 

update lm_ln_info li set li.Ln_Cost_Prod =Ln_Cost_Prod+(lm_loan.loan_os_prcp-TOT_PROV_AMT) where li.loan_no IN (Select loan_no from lm_loan ln where ln.bch_cde in (‘1’,‘2’,’3‘) and ln.loan_deva_ind='Y' and ln.loan_sts='ACTV')

17,082

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧