我有4列的表t1。
A B C D
--------
1 A 1 10
1 A 1 15
1 A 2 12
1 A 3 11
我需要更新,它根据已分组的A,B和C列获取D列的最大值。然后用该最大值更新具有相同A,B,C的每一行的D列。
因此,对于第一行,D将被更新为15。由于A,B和C不同,因此第三和第四保持相同的值。
答案 0 :(得分:1)
使用标准SQL进行此操作的典型方法是:
update t
set d = (select max(t2.d) from t t2 where t2.a = t.a and t2.b = t.b and t2.c = t.c);
许多特定的数据库支持可能具有更好性能的替代解决方案。
答案 1 :(得分:0)
您可以考虑以下陈述:
update tab
set D = (select max(D) from tab)
where (A, B, C) in
(
select A, B, C
from tab t
group by A, B, C
having count(1)>1
);
select * from tab;
A B C D
- - - --
1 A 1 15
1 A 1 15
1 A 2 12
1 A 3 11