;with gaga as
(select ROW_NUMBER() over(PARTITION by 姓名,课程,分数 order by 分数)as rownum,* from tb)
delete from gaga where rownum<>1
还有类似的
update tb set field1=3 from tb inner join tb2 on ..select出来的或是join得到的都是中间结果集,这个中间结果集是怎么与原始的行相关联的,如果中间集的一行对应原始的多行会怎样.一直总是研究select的内幕,忽略了update delete的内部机制,
有大神提点一二吗
(select ROW_NUMBER() over(PARTITION by 姓名,课程,分数 order by 分数)as rownum,* from tb)
delete from gaga where rownum<>1
还有类似的
update tb set field1=3 from tb inner join tb2 on ..select出来的或是join得到的都是中间结果集,这个中间结果集是怎么与原始的行相关联的,如果中间集的一行对应原始的多行会怎样.一直总是研究select的内幕,忽略了update delete的内部机制,
有大神提点一二吗
(select 姓名,COUNT(1) as quantity from tb group by 姓名)
delete from gaga where quantity<>1
消息 4403,级别 16,状态 1,第 1 行
因为视图或函数 'gaga' 包含聚合、DISTINCT 或 GROUP BY 子句或者 PIVOT 或 UNPIVOT 运算符,所以无法进行更新
不让聚合,不会出现中间集一个行对应原始多行的情况。
但是中间集的一行是如何返回去找到原始的对应行的呢,是不是中间集的行带有原始行的rowid