Mysql 从另一个select语句更新表

Mysql 从另一个select语句更新表,mysql,sql,Mysql,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

我试图通过从另一个表中选择数据来更新我的列。我提出了这个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服务器版本对应的手册,以了解第4行“从SELECT id、SUM实际金额、Countid count FROM i”附近使用的正确语法


上面的语句哪里出错了?

MySQL不支持这种连接语法。您应该在活动表和子查询之间使用显式内部联接:

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;