MySQL5.7计算两表列总和差值插入目标表报SQL语法错误如何解决
语法错误原因
- 违反SELECT语句语法规则:SELECT子句仅用于定义返回的列表达式,不能将
FROM表声明拆分到每个字段的运算逻辑中,原代码把FROM communities、FROM daily_shares嵌入列的减法运算,不符合MySQL语法要求。 - 存在逻辑笔误:所有字段的减法右侧都错误写为
SUM(shares_copylink) FROM daily_shares,没有和左侧communities表的对应字段匹配,计算逻辑完全错误。 - 查询结构缺失:整段SELECT语句没有声明主查询的FROM表,WHERE子句的位置也不符合语法规范。
正确实现语句
INSERT INTO shares_diff ( `date`, `shares_copylink`, `shares_email`, `shares_facebook`, `shares_messenger`, `shares_pinterest`, `shares_twitter`, `shares_whatsapp` ) SELECT CURDATE() AS `date`, c.total_copylink - IFNULL(d.total_copylink, 0) AS shares_copylink, c.total_email - IFNULL(d.total_email, 0) AS shares_email, c.total_facebook - IFNULL(d.total_facebook, 0) AS shares_facebook, c.total_messenger - IFNULL(d.total_messenger, 0) AS shares_messenger, c.total_pinterest - IFNULL(d.total_pinterest, 0) AS shares_pinterest, c.total_twitter - IFNULL(d.total_twitter, 0) AS shares_twitter, c.total_whatsapp - IFNULL(d.total_whatsapp, 0) AS shares_whatsapp FROM ( -- 统计communities表所有分享字段的总和 SELECT SUM(shares_copylink) AS total_copylink, SUM(shares_email) AS total_email, SUM(shares_facebook) AS total_facebook, SUM(shares_messenger) AS total_messenger, SUM(shares_pinterest) AS total_pinterest, SUM(shares_twitter) AS total_twitter, SUM(shares_whatsapp) AS total_whatsapp FROM communities ) AS c LEFT JOIN ( -- 统计daily_shares表所有分享字段的总和 SELECT SUM(shares_copylink) AS total_copylink, SUM(shares_email) AS total_email, SUM(shares_facebook) AS total_facebook, SUM(shares_messenger) AS total_messenger, SUM(shares_pinterest) AS total_pinterest, SUM(shares_twitter) AS total_twitter, SUM(shares_whatsapp) AS total_whatsapp FROM daily_shares ) AS d ON 1=1 -- 保留原逻辑:仅当daily_shares表存在数据时执行插入 WHERE EXISTS (SELECT * FROM daily_shares);
内容的提问来源于stack exchange,提问作者Revolucion for Monica
相关产品推荐
相关产品推荐

