(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的新值更新到旧制对应的字段上去