从两个表插入到一个表,而在重复时只需添加数量

Insert from two tables to one while on duplicate just add quantity

我在 H2 数据库中有三个 table 彼此没有关系。

Table 1: NETSALE:Attributes> INVOICEDATE | PRODUCTID | QUANTITY

Table 2: BALANCESALE:Attributes> INVOICEDATE | PRODUCTID | QUANTITY

Table 3: ANNUALSALE:Attributes> MONTH | PRODUCTID | QUANTITY

在每个月的月底,我想将整个月的销售额复制到 Table 3,因此我使用以下查询将记录从 Table 1 转移到 Table 3.

INSERT INTO ANNUALSALE (MONTH, PRODUCTID, QUANTITY) 
SELECT 
  PRODUCTID,
  SUM(QUANTITY) 
FROM NETSALE 

WHERE 
  EXTRACT(MONTH FROM INVOICEDATE) = 'thisMonth' 
AND  
  EXTRACT(YEAR FROM INVOICEDATE) = 'thisYear'
GROUP BY(PRODUCTID)

现在我在将销售记录从 Table 2 转移到 Table 3 时遇到困难。我 select 来自 table 2 的所有记录就像上面的帮助一样下面这个查询的起始部分有问题,标记为 **。记录应该以这样的方式插入,如果这个月的 productID 已经存在,那么只需更新数量,否则插入默认值。

**INSERT INTO ANNUALSALE (MONTH, PRODUCTID, QUANTITY)
**SELECT 
  PRODUCTID,
  SUM(QUANTITY)
FROM BALANCESALE
WHERE 
  EXTRACT(MONTH FROM INVOICEDATE) = 'thisMonth' 
AND  
  EXTRACT(YEAR FROM INVOICEDATE) = 'thisYear'
GROUP BY(PRODUCTID)

确保你在月上有唯一键,productId,如果记录已经存在,mySQL会触发错误,你可以使用'ON DUPLICATE KEY UPDATE'触发器。

INSERT INTO table (a,b,c) VALUES (1,2,3)
   ON DUPLICATE KEY UPDATE c=c+1;

http://dev.mysql.com/doc/refman/5.7/en/insert-on-duplicate.html

我不确定您是否可以一次对多条记录执行此操作。您可能需要先执行 select,然后遍历结果以一次更新一条记录来执行插入。