SQL在没有ID的同一张表上选择int更新

时间:2018-10-22 16:11:55

标签: sql oracle

我有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不同,因此第三和第四保持相同的值。

2 个答案:

答案 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

Rextester Demo