=============update语句为什么要这么写啊?==========

Proyang 2007-11-28 01:57:07
下面这个SQL语句:
update part1 a set (a.dose,a.totaldose)=
(select b.dose,b.totaldose from part2 b where a.partno=b.partno)
where exists(select b.partno from part2 b where a.partno=b.partno)

为什么一定加上exists这部分才好用呢?
什么情况下可以不加上exists的部分?什么情况下一定要加exists部分?
请大家发言。。!!!

...全文
79 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
Proyang 2007-11-28
  • 打赏
  • 举报
回复
原来如此。谢谢各位指点
小兽 2007-11-28
  • 打赏
  • 举报
回复
update part1 a set (a.dose,a.totaldose)=
(select b.dose,b.totaldose from part2 b where a.partno=b.partno)
where exists(select b.partno from part2 b where a.partno=b.partno)

如果不加where条件:
update part1 a set (a.dose,a.totaldose)=
(select b.dose,b.totaldose from part2 b where a.partno=b.partno)
意思是:
把part1表的所有记录的a.dose,a.totaldose两个字段更新为表part2的b.dose,b.totaldose字段内容;条件是a.partno=b.partno,当不存在满足此条件的记录时,查询出来的b.dose,b.totaldose两个字段当然为null。所以part1表的a.dose,a.totaldose两个字段自然被update为null了。

加上where条件以后,就限定了,只更新part1表中符合exists(select b.partno from part2 b where a.partno=b.partno)的记录。
自然不会把所有记录都update为null。
HEROWD 2007-11-28
  • 打赏
  • 举报
回复
没有匹配的会update为null
Proyang 2007-11-28
  • 打赏
  • 举报
回复
exists条件在 (select b.dose,b.totaldose from part2 b where a.partno=b.partno)
已经包括了,为什么要一定要写呢????
小兽 2007-11-28
  • 打赏
  • 举报
回复
update part1 a set (a.dose,a.totaldose)=
(select b.dose,b.totaldose from part2 b where a.partno=b.partno)
where exists(select b.partno from part2 b where a.partno=b.partno)

等于

update part1 a set (a.dose,a.totaldose)=
(select b.dose,b.totaldose from part2 b where a.partno=b.partno)
where a.partno in (select b.partno from part2 b)

不过第一句效率会高些

还可稍稍优化

update part1 a set (a.dose,a.totaldose)=
(select b.dose,b.totaldose from part2 b where a.partno=b.partno)
where exists(select 'X' from part2 b where a.partno=b.partno)

tian00weiwei 2007-11-28
  • 打赏
  • 举报
回复
目的是,当A表里存在和B表里相同的PARTNO时,则修改A表记录

17,082

社区成员

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

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