oracle 语句求全注释

(1)
已知两张表格 a 表: C_NE 和 b表temp_zz
update C_NE a
set a.zassu_gra =
(select zlevel from temp_zzz b where a.product_no = b.xinid)
where a.stateflag = 0
and exists
(select 1 from temp_zz b where a.product_no = b.xinid);

有括号的时候括号的优先级高。你可以一点一点分析,第一个括号里查询出的值赋给了a.zassu_gra,第二个的查询结果是看你,查出来有多少条结果,每一条的值都为1

目的是更新C_NE 这张表,
先 看where条件,限定了 a.stateflag = 0 ,还有 存在于 temp_zz这个表的记录,
即下面这部分数据

select * from C_NE a where 
a.stateflag = 0
and exists
(select 1 from temp_zz b where a.product_no = b.xinid)

然后,对这部分数据,更新a.zassu_gra 这个字段,更新成(select zlevel from temp_zzz b where a.product_no = b.xinid) 这个值,如果想在更新前看这个数据的话,你可以这么查一下

select a.*,a.zassu_gra 旧值,(select zlevel from temp_zzz b where a.product_no = b.xinid) 新值 
from C_NE a
where a.stateflag = 0
and exists
(select 1 from temp_zz b where a.product_no = b.xinid);

所以,实际上你这个更新的效果,就是把上面这个sql的新值更新到旧制对应的字段上去