因为with必须紧跟引用的select语句,而不是delete,update,merge等。
所以有2种方式:
方式1.
update table1 b set b.NAME=( with t as ( select * from temp ) select a.NAME from table2 a where a.ID=b.ID ) where exists(select 1....)
方式2.
和merge into 一起使用
merge into table1 a using( with t as ( select * from ...... ) select a.NAME from table2 inner join t a on ...... ) b on (a.id = b.id and ......) when matched then update set a.NAME=b.NAME
--delete where a.nums=0
特别说明:
DELETE字句只能写在MATCHED情况中,不匹配时无法删除会报错。
当DELETE跟在UPDATE子句之后时,DELETE字句是针对UPDATE字句修改后的数据进行过滤的。
比如需要删除所有C字段="0"的数据,UPDATE字句将所有数据的C字段都更新为0,
那么会删除所有数据,而不是原本为0的数据。