mysql 复制键更新与选择

e5nszbig  于 5个月前  发布在  Mysql
关注(0)|答案(2)|浏览(55)

我已经通过几个职位,但无法找到确切的解决办法。这是我想要的-

Table1 - column1, column2, column3, amount as column4
Table2 - column1, column2, column3, amount as column4

字符串
我使用下面的代码,它可以很好地插入,但对于更新,它不更新金额列
下面是代码

INSERT INTO table2 (column1,column2, column3, amount)
SELECT column1, column2, column3, sum(amount) 
FROM table1 
where column5 != '' and column5 != 'null' and column7 = 'good' 
group by column1
ON DUPLICATE KEY UPDATE amount=SELECT sum(amount) FROM table1 where column5 != '' and column5 != 'null' and column7 = 'good' group by column1;


我知道错误是更新部分,因为当我使ON DUPLICATE KEY UPDATE amount=0这工程和所有行更新为0
我在更新部分做错了什么。
谢谢你的帮助提前。
我想更新查询部分得到工作。

raogr8fs

raogr8fs1#

子查询在ON DUPLICATE KEY UPDATE上是不允许的,这里有一种方法可以做到这一点,而不需要重新计算总数,方法是使用一个派生表,该表允许引用GROUP BY查询中的列:

INSERT INTO table2 (column1,column2, column3, amount)
SELECT *
FROM (
  SELECT column1, column2, column3, SUM(amount) AS _amount
  FROM table1
  WHERE column5 != '' and column5 != 'null' and column7 = 'good' 
  GROUP BY column1, column2, column3
) AS S
ON DUPLICATE KEY UPDATE amount = _amount;

字符串
Demo here

velaa5lx

velaa5lx2#

在子查询周围放置()。如下所示:

ON DUPLICATE KEY UPDATE amount = (SELECT sum(amount) FROM table1 where column5 != '' and column5 != 'null' and column7 = 'good' group by column1);

字符串

相关问题