update 更新语句关联两张表为什么加exists

 我来答
micro0369
2018-01-16 · TA获得超过1.2万个赞
知道大有可为答主
回答量:9250
采纳率:85%
帮助的人:4024万
展开全部

oracle吧,

  • sqlserver支持update from的语法

  • 比如:

    1
  •    
  • update a set a.value = b.data from b where a.id = b.id
  •    
  • 可以看出,其实a和b做了一次内连接;

  • 而oracle不支持update from的语法,那再来看看oracle的写法:   

  • update a set a.value = (select b.data from b where a.id = b.id) where exists(select 1 from b where a.id = b.id)
  •    
  • 或者用in:  

update a set a.value = (select b.data from b where a.id = b.id) where a.id in (select b.id from b)

  • 如果我们把exists或者in的部分去掉:

  •   
    update a set a.value = (select b.data from b where a.id = b.id)
  •    
  • 再来点数据:

    a表:

id value
1  'abc'
2  'def'

    b表:

id data
1  '123'
3  '456'

    那么我们用不带exists和in的update(

    update a set a.value = (select b.data from b where a.id = b.id)

    )会怎样?

    A表:

id value
1  '123'
2  null

    这不会是你要的吧?!

    所以:如果使用关联表进行更新,并且其它表和被更新的表也要关联时(此处埋伏了一个条件未讲可以自己思考试验),则需要带上exists或in的条件。


推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式