oracle 多表更新问题

cakecc 2013-03-19 10:47:58
update customers a -- 使用别名
set city_name=(select b.city_name from tmp_cust_city b where b.customer_id=a.customer_id)
where exists (select 1
from tmp_cust_city b
where b.customer_id=a.customer_id

)
-- update 超过2个值
update customers a -- 使用别名
set (city_name,customer_type)=(select b.city_name,b.customer_type
from tmp_cust_city b
where b.customer_id=a.customer_id)
where exists (select 1
from tmp_cust_city b
where b.customer_id=a.customer_id
)

上面两段代码是在网上看到的,但是有些不明白,为什么在前面已经关联过一次b表,后面又要关联一次(红色部分)呢?
之前都是用的sql server ,oracle是初学,不是很懂,求教了.
...全文
671 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
Vincent_Ch 2013-04-02
  • 打赏
  • 举报
回复
没有where exists 的话a表有的记录但b表没有的记录,a表的city_name更新为空, 有where exists 就会保留a表中原来的记录。
jg_huang 2013-04-02
  • 打赏
  • 举报
回复
如果不加条件,b表不存在与a表对应的记录话,那么a表被更新字段就会被更新为空。
fjmwish 2013-04-01
  • 打赏
  • 举报
回复
我刚才看了 确实 是,没有 重复的 ,他们虽然 长得 差不多 吧,但是 意义是 不一样的,可能 你没看懂吧,这个以后,基本语法 差不多吧,和mysql ,sql server ,Oracle 就是 函数 不一样 了,基本 语法很接近的 。
ICE-word 2013-03-26
  • 打赏
  • 举报
回复
没有在写一遍!红色的部分是你更新的条件!
LXM995 2013-03-26
  • 打赏
  • 举报
回复
一个值,一个是条件,不矛盾吧!
forgetsam 2013-03-19
  • 打赏
  • 举报
回复
一个是在值的位置,是用来查值的,一个在where位置,是用来过滤数据的,什么叫“又写了一遍”
软件钢琴师 2013-03-19
  • 打赏
  • 举报
回复
你做个试验 就明白了:确保把 值 更新到 你想更新的行上
请叫我-雷人 2013-03-19
  • 打赏
  • 举报
回复
where exists (select 1 from tmp_cust_city b where b.customer_id=a.customer_id这段? 指的是b 表存在这个结果集,确定update的范围

17,086

社区成员

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

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