SQL select int update для той же таблицы без идентификатора - PullRequest
0 голосов
/ 22 октября 2018

У меня была таблица t1 с 4 столбцами.

A B C D 
--------
1 A 1 10
1 A 1 15
1 A 2 12
1 A 3 11

Мне нужно обновить, чтобы получить максимальное значение из столбца D на основе сгруппированных столбцов A, B и C. И затем обновить столбец D для каждой строки.с теми же A, B, C с этим максимальным значением.

Таким образом, для первого ряда D будет обновлен до 15. Для третьего и четвертого оставьте то же значение, потому что A, B и C не являютсято же самое.

Ответы [ 2 ]

0 голосов
/ 22 октября 2018

Вы можете рассмотреть следующие утверждения:

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

0 голосов
/ 22 октября 2018

Канонический способ сделать это с использованием стандартного 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);

Многие конкретные базы данных поддерживают альтернативные решения, которые, вероятно, будут иметь более высокую производительность.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...