MySQL обновить то же поле таблицы из результатов DENSE_RANK () - PullRequest
2 голосов
/ 11 января 2020

Я пытаюсь обновить ранг поля с помощью DENSE_RANK () из той же таблицы, пытаясь выполнить приведенный ниже запрос, получая «Операнд должен содержать 1 столбец (столбцы)», любезно помогите в решении этой проблемы

UPDATE scoretable SET rank= (SELECT *,DENSE_RANK() OVER (PARTITION BY game_id ORDER BY points DESC , diff ASC) FROM scoretable WHERE STATUS ='Active')

Детали таблицы

enter image description here

Результаты запроса DENSE_RANK ()

SELECT *,DENSE_RANK() OVER (PARTITION BY game_id ORDER BY points DESC , diff ASC) FROM scoretable WHERE STATUS ='Active'

enter image description here

1 Ответ

1 голос
/ 11 января 2020

Как прокомментировал P.Salmon: MySQL не позволяет обновленной таблице появляться в подзапросе. Вместо этого вы можете dense_rank() в подзапросе, а затем join с таблицей, например:

update scoretable s
inner join (
    select id, dense_rank() over(partition by game_id order by points desc, diff) rn
    from scoretable
    where status = 'Active'
) r on r.id = s.id
set s.rank = r.rn

Примечание: здесь предполагается, что id является уникальным ключом в таблице.

...