update xj_ftthSN_MSG a set (a.city_id) = (select b.city_id from tab_deviceresource b where a.oltip = b.loopback_ip
and rownum < 2)
where exists (select 1 from tab_deviceresource c where a.oltip = c.loopback_ip)
oracle中可以执行
请分析一下,这条语句的执行策略和
为什么这样写能执行成功?
最右边的where是update的条件,中间的where是给id set值的条件
一、语句:
update
xj_ftthSN_MSG a
set
(a.city_id) = (select b.city_id from tab_deviceresource b where a.oltip = b.loopback_ip and rownum < 2)
where
exists (select 1 from tab_deviceresource c where a.oltip = c.loopback_ip)
二、update语法(一一对应)
UPDATE 表名称 SET 列名称 = 新值 WHERE 列名称 = 某值
三、exists
EXISTS用于检查子查询是否至少会返回一行数据,该子查询实际上并不返回任何数据,而是返回值True或False
EXISTS 指定一个子查询,检测 行 的存在。
四、改变的数据行
a.oltip = c.loopback_ip的行
注:如果不对请更正。
括号里面的都是子查询,优先于括号外边的来执行,执行所得的结果将作为括号外边对应字段的值来参与外边的sql语句的执行。