Как обновить несколько строк на основе оператора select? - PullRequest
0 голосов
/ 22 мая 2019

Возможно, я упускаю что-то очень очевидное, но не могу запустить несколько операторов UPDATE. Чего я хочу добиться - это SELECT значение AVG() из таблицы и UPDATE столбец на основе этих значений в другой таблице.

Я следовал следующему решению, но не смог его запустить:

Оригинальный ответ

мое решение:

UPDATE
  teams
SET
  teams.overall_rank = q.rank_avg
FROM
  (
    SELECT
      team_id as t_id,
      AVG(rank) as rank_avg
    FROM
      team_list
    WHERE
      rank NOT IN (0, -1)
    GROUP BY
      team_id
    ORDER BY
      rank_avg
  ) q
WHERE
  q.t_id = teams.team_id

Сообщение об ошибке:

You have an error in your SQL syntax; it seems the error is around: 'FROM ( SELECT team_id as t_id, AVG(rank) as rank_avg FR' at line 5

Я использую MySQL. Что мне здесь не хватает?

Ответы [ 2 ]

1 голос
/ 22 мая 2019

Я думаю, что вам нужно объединение:

UPDATE teams t INNER JOIN (
    SELECT
      team_id as t_id,
      AVG(rank) as rank_avg
    FROM team_list
    WHERE rank NOT IN (0, -1)
    GROUP BY team_id
) q ON q.t_id = t.team_id 
SET t.overall_rank = q.rank_avg

ORDER BY в подзапросе не требуется.

1 голос
/ 22 мая 2019

Попробуйте ниже - ваш синтаксис недопустим для mysql

UPDATE teams
join
  (
    SELECT
      team_id as t_id,AVG(rank) as rank_avg
      FROM team_list
      WHERE rank NOT IN (0, -1)
      GROUP BY team_id
   ) q on q.t_id = teams.team_id 
SET teams.overall_rank = q.rank_avg
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...