从两个表插入到一个表,而在重复时只需添加数量
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,然后遍历结果以一次更新一条记录来执行插入。
我在 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,然后遍历结果以一次更新一条记录来执行插入。