Обновление таблицы из другого оператора выбора - PullRequest
0 голосов
/ 09 января 2019

Я пытаюсь обновить свои столбцы, выбирая данные из другой таблицы. Я придумал этот SQL, где он будет выбирать данные из двух таблиц и обновлять их до моей основной таблицы. SQL как показано ниже.

UPDATE activity a 
SET a.amount = v.amount, 
    a.count = v.count 
FROM ( SELECT id,
                Sum(actual) amount,
                Count(id)  count
         FROM   amount_first
         WHERE  status = 1
                AND updated >= 1538323200
                AND updated <= 1541001599
         GROUP  BY id
         UNION
         SELECT id,
                Sum(0) amount,
                0      count
         FROM   amount_second
         WHERE  type = 3
                AND created >= 1538323200
                AND created <= 1541001599
         GROUP  BY id ) v
WHERE v.id = a.playerid

Однако я получаю эту ошибку

Код ошибки: 1064. У вас ошибка в синтаксисе SQL; проверьте руководство, соответствующее вашей версии сервера MySQL, на предмет правильного синтаксиса, который следует использовать рядом с 'FROM (SELECT id, Sum (фактическое) количество, Count (id) count FROM i' в строке 4

Где пошло не так с приведенным выше утверждением?

1 Ответ

0 голосов
/ 09 января 2019

MySQL не поддерживает этот синтаксис соединения. Вы должны использовать явное внутреннее соединение между таблицей activity и подзапросом:

UPDATE activity a 
INNER JOIN
(
     SELECT id,
            Sum(actual) amount,
            Count(id)  count
     FROM   amount_first
     WHERE  status = 1
            AND updated >= 1538323200
            AND updated <= 1541001599
     GROUP  BY id
     UNION
     SELECT id,
            Sum(0) amount,
            0      count
     FROM   amount_second
     WHERE  type = 3
            AND created >= 1538323200
            AND created <= 1541001599
     GROUP  BY id
) v
    ON v.id = a.playerid
SET a.amount = v.amount, 
    a.count = v.count;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...