我正在尝试使用select中运行mysql更新查询,但是我收到了一个错误.查询是这样的:
UPDATE keywords_stats_google_temp SET (Impressions_chg, Clicks_chg, AveragePosition_chg, Ctr_chg, AverageCpc_chg, CurrentMaxCpc_chg, FreeJoins_chg, PaidJoins_chg) = (SELECT
SUM(Impressions) AS Impressions,
SUM(Clicks) AS Clicks,
SUM(Impressions*AveragePosition)/SUM(Impressions) AS AveragePosition,
(SUM(Clicks)*revenue_price)/SUM(Impressions) AS Ctr,
SUM(Spend)/SUM(Clicks) AS AverageCpc,
CurrentMaxCpc,
SUM(free_joins) AS FreeJoins,
SUM(paid_joins) AS PaidJoins
FROM (SELECT KeywordId FROM keywords_stats_google_temp) a JOIN keywords_stats_google_naughtymeetings b ON b.KeywordId = a.KeywordId WHERE b.TimePeriod >= '2012-04-01 00:00:00'
AND b.TimePeriod <= '2012-04-23 00:00:00' GROUP BY a.KeywordId, MatchType)
Run Code Online (Sandbox Code Playgroud)
但我只得到"#1064 - 你的SQL语法有错误;请查看与你的MySQL服务器版本相对应的手册,以便在'附近使用正确的语法'(Impressions_chg,Clicks_chg,AveragePosition_chg,Ctr_chg,AverageCpc_chg,Curr'在第1行"
任何人都可以帮我吗?
谢谢!
你不能拥有SET (a,b) = (value_a, value_b)
MySQL.
重写查询.像这样的东西:
UPDATE
keywords_stats_google_temp AS u
JOIN
( SELECT
SUM(Impressions) AS Impressions,
SUM(Clicks) AS Clicks,
SUM(Impressions*AveragePosition)/SUM(Impressions) AS AveragePosition,
(SUM(Clicks)*revenue_price) / SUM(Impressions) AS Ctr,
SUM(Spend)/SUM(Clicks) AS AverageCpc,
CurrentMaxCpc,
SUM(free_joins) AS FreeJoins,
SUM(paid_joins) AS PaidJoins
FROM keywords_stats_google_naughtymeetings AS b
WHERE b.TimePeriod >= '2012-04-01 00:00:00'
AND b.TimePeriod <= '2012-04-23 00:00:00'
GROUP BY KeywordId,
MatchType
) AS tmp
ON tmp.KeywordId = u.KeywordId
AND tmp.MatchType = u.MatchType
SET
u.Impressions_chg = tmp.Impressions,
u.Clicks_chg = tmp.Clicks,
u.AveragePosition_chg = tmp.AveragePosition,
u.Ctr_chg = tmp.Ctr,
u.AverageCpc_chg = tmp.AverageCpc,
u.CurrentMaxCpc_chg = tmp.CurrentMaxCpc,
u.FreeJoins_chg = tmp.FreeJoins,
u.PaidJoins_chg = tmp.PaidJoins ;
Run Code Online (Sandbox Code Playgroud)