为什么a表里的所有数据被更新?

fangquan1980 2013-06-24 10:04:08
update t_table a

set (f1,f2,f3)=(select f1,f2,f3 from testz b where a.id=b.id)

结果a表中id不在b表中的数据也被更新,f1.f2.f3都变成了空值?
...全文
254 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
Regan-lin 2013-07-07
  • 打赏
  • 举报
回复
引用 6 楼 devidh 的回复:
select f1, f2, f3 from testz b where a.id = b.id 这句话有没有返回多行的可能......
当你有多个a.id和b.id相等时就有返回多行了,如果都是唯一就没有了,你注意下你自己条件精确就行了
kqfh 2013-07-07
  • 打赏
  • 举报
回复
2楼的回答最中规中矩。
善若止水 2013-07-07
  • 打赏
  • 举报
回复
引用 5 楼 linwaterbin 的回复:
2楼比1楼好的地方在于"注意空值的影响" 通常关联update、2楼那样是可以的
谢谢楼主的提醒,确实是我考虑的不足
哈特比尔波 2013-07-07
  • 打赏
  • 举报
回复
因为你的(select f1,f2,f3 from testz b where a.id=b.id)这个值为空,为什么为空,因为你条件里只有个b表,而a表在上面,在这里没有写。在from 后面加个“a,”就可以了。
lkq_david 2013-07-04
  • 打赏
  • 举报
回复
楼上是对的,要在外层加个where exists的 update t_table a set (f1, f2, f3) = (select f1, f2, f3 from testz b where a.id = b.id) where exists (select 1 from testz b where a.id = b.id)
devid 2013-07-04
  • 打赏
  • 举报
回复
select f1, f2, f3 from testz b where a.id = b.id 这句话有没有返回多行的可能......
linwaterbin 2013-06-25
  • 打赏
  • 举报
回复
2楼比1楼好的地方在于"注意空值的影响" 通常关联update、2楼那样是可以的
u010412956 2013-06-25
  • 打赏
  • 举报
回复
引用 3 楼 fangquan1980 的回复:
[quote=引用 2 楼 u010412956 的回复:] [quote=引用 1 楼 zhaoxiangchong 的回复:] 你的sql语句写的不对,应该在where子句中增加限制才对
update t_table a

    set (f1,f2,f3)=(select f1,f2,f3 from testz b )
  where a.id=b.id
...你这个写法明显语法就错误了。。。
update t_table a
   set (f1, f2, f3) =
       (select f1, f2, f3 from testz b where a.id = b.id)
 where exists (select 1 from testz b where a.id = b.id)
[/quote] 你的回复是正确的,怎么理解这个事情?[/quote] 没有带where条件,那肯定是全表更新了。 (select f1, f2, f3 from testz b where a.id = b.id) 这个只是代表能不能更新到值,找不到肯定就会置空。 跟表需要更新多少数据是没有直接关系的。
fangquan1980 2013-06-25
  • 打赏
  • 举报
回复
引用 2 楼 u010412956 的回复:
[quote=引用 1 楼 zhaoxiangchong 的回复:] 你的sql语句写的不对,应该在where子句中增加限制才对
update t_table a

    set (f1,f2,f3)=(select f1,f2,f3 from testz b )
  where a.id=b.id
...你这个写法明显语法就错误了。。。
update t_table a
   set (f1, f2, f3) =
       (select f1, f2, f3 from testz b where a.id = b.id)
 where exists (select 1 from testz b where a.id = b.id)
[/quote] 你的回复是正确的,怎么理解这个事情?
u010412956 2013-06-25
  • 打赏
  • 举报
回复
引用 1 楼 zhaoxiangchong 的回复:
你的sql语句写的不对,应该在where子句中增加限制才对
update t_table a

    set (f1,f2,f3)=(select f1,f2,f3 from testz b )
  where a.id=b.id
...你这个写法明显语法就错误了。。。
update t_table a
   set (f1, f2, f3) =
       (select f1, f2, f3 from testz b where a.id = b.id)
 where exists (select 1 from testz b where a.id = b.id)
善若止水 2013-06-24
  • 打赏
  • 举报
回复
你的sql语句写的不对,应该在where子句中增加限制才对
update t_table a

    set (f1,f2,f3)=(select f1,f2,f3 from testz b )
  where a.id=b.id

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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