Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用另一个表更新mysql表多列_Mysql - Fatal编程技术网

使用另一个表更新mysql表多列

使用另一个表更新mysql表多列,mysql,Mysql,我有以下几张表 (表:平均月值1) 及 (表:注册表数据3) 我想使用注册表数据更新平均月值表3 我跟着 这是我的问题 UPDATE `avg_month_val1` a,`reg_data3` b SET a.`year`=YEAR(b.`date`), a.`month`=MONTH(b.`date`), a.`evep`=ROUND(AVG(b.evep),2), a.`max_temp`=ROUND(AVG(b.max_temp),2), a.`min_temp`=ROUND(AVG

我有以下几张表 (表:平均月值1

表:注册表数据3

我想使用注册表数据更新平均月值表3 我跟着

这是我的问题

UPDATE `avg_month_val1` a,`reg_data3` b SET
a.`year`=YEAR(b.`date`),
a.`month`=MONTH(b.`date`),
a.`evep`=ROUND(AVG(b.evep),2),
a.`max_temp`=ROUND(AVG(b.max_temp),2), 
a.`min_temp`=ROUND(AVG(b.min_temp),2) ,
a.`rainfall`=ROUND(SUM(b.rainfall),2), 
a.`sunshine_hrs`=ROUND(AVG(b.sunshine_hrs),2)
WHERE a.`year`=YEAR(b.`date`)
但它给出了以下错误

Error Code: 1111
Invalid use of group function
我是如何做到这一点的

UPDATE avg_month_val1 t JOIN 
(
  SELECT YEAR(date) year,
         MONTH(date) month,
         ROUND(AVG(evep), 2) evep,
         ROUND(AVG(max_temp), 2) max_temp,
         ROUND(AVG(min_temp), 2) min_temp,
         ROUND(SUM(rainfall), 2) rainfall,
         ROUND(AVG(sunshine_hrs), 2) sunshine_hrs
    FROM reg_data3
   GROUP BY YEAR(date), MONTH(date)
) s 
    ON t.year = s.year
   AND t.month = s.month
   SET t.evep = s.evep,
       t.max_temp = s.max_temp, 
       t.min_temp = s.min_temp, 
       t.rainfall = s.rainfall, 
       t.sunshine_hrs = s.sunshine_hrs 
使用
UPDATE
意味着您已经在表
avg_month_val1
中填充了列
year
month
的行,并且只想使用
reg_data3
中的聚合值更新数据列(
evep
,…)

但如果情况并非如此,并且您希望
插入所有列,包括
,但能够使用相同的年和月值更新现有行,则可以使用重复键上的
子句

INSERT INTO avg_month_val1 (year, month, evep, max_temp, min_temp, rainfall, sunshine_hrs)
SELECT YEAR(date) year,
       MONTH(date) month,
       ROUND(AVG(evep), 2) evep,
       ROUND(AVG(max_temp), 2) max_temp,
       ROUND(AVG(min_temp), 2) min_temp,
       ROUND(SUM(rainfall), 2) rainfall,
       ROUND(AVG(sunshine_hrs), 2) sunshine_hrs
  FROM reg_data3
 GROUP BY YEAR(date), MONTH(date)
 ON DUPLICATE KEY UPDATE
       evep = VALUES(evep),
       max_temp = VALUES(max_temp), 
       min_temp = VALUES(min_temp), 
       rainfall = VALUES(rainfall), 
       sunshine_hrs = VALUES(sunshine_hrs)
要使其正常工作您必须确保在
平均月值1中对(年、月)具有
唯一
主键
约束

UPDATE avg_month_val1 t JOIN 
(
  SELECT YEAR(date) year,
         MONTH(date) month,
         ROUND(AVG(evep), 2) evep,
         ROUND(AVG(max_temp), 2) max_temp,
         ROUND(AVG(min_temp), 2) min_temp,
         ROUND(SUM(rainfall), 2) rainfall,
         ROUND(AVG(sunshine_hrs), 2) sunshine_hrs
    FROM reg_data3
   GROUP BY YEAR(date), MONTH(date)
) s 
    ON t.year = s.year
   AND t.month = s.month
   SET t.evep = s.evep,
       t.max_temp = s.max_temp, 
       t.min_temp = s.min_temp, 
       t.rainfall = s.rainfall, 
       t.sunshine_hrs = s.sunshine_hrs 
使用
UPDATE
意味着您已经在表
avg_month_val1
中填充了列
year
month
的行,并且只想使用
reg_data3
中的聚合值更新数据列(
evep
,…)

但如果情况并非如此,并且您希望
插入所有列,包括
,但能够使用相同的年和月值更新现有行,则可以使用重复键上的
子句

INSERT INTO avg_month_val1 (year, month, evep, max_temp, min_temp, rainfall, sunshine_hrs)
SELECT YEAR(date) year,
       MONTH(date) month,
       ROUND(AVG(evep), 2) evep,
       ROUND(AVG(max_temp), 2) max_temp,
       ROUND(AVG(min_temp), 2) min_temp,
       ROUND(SUM(rainfall), 2) rainfall,
       ROUND(AVG(sunshine_hrs), 2) sunshine_hrs
  FROM reg_data3
 GROUP BY YEAR(date), MONTH(date)
 ON DUPLICATE KEY UPDATE
       evep = VALUES(evep),
       max_temp = VALUES(max_temp), 
       min_temp = VALUES(min_temp), 
       rainfall = VALUES(rainfall), 
       sunshine_hrs = VALUES(sunshine_hrs)

要使其正常工作您必须确保在
平均月值1

中对(年、月)具有
唯一
主键
约束。您能解释一下您想做什么吗?该查询仅按
年份
连接表。假设表
a
包含给定年份的12条记录,哪些记录应该更新?如果您提供了源数据和预期结果的示例,这也会很有帮助。首先检查所有值是否正常,我的意思是年份(b.date)是否有任何值?然后检查两个表中的数据类型是否相同?我的意思是可以存储b表中的值。你能解释一下你想做什么吗?该查询仅按
年份
连接表。假设表
a
包含给定年份的12条记录,哪些记录应该更新?如果您提供了源数据和预期结果的示例,这也会很有帮助。首先检查所有值是否正常,我的意思是年份(b.date)是否有任何值?然后检查两个表中的数据类型是否相同?我的意思是可以存储b表中的值。