【问题标题】:Using ON DUPLICATE KEY UPDATE for big automatic insertion使用 ON DUPLICATE KEY UPDATE 进行大型自动插入
【发布时间】:2013-02-08 06:14:52
【问题描述】:

我必须像这样在表basic_data 中插入很多行:

基本数据
客户 |最大销售 |总销售额

CREATE TABLE `basic_data` (
`id`  int(11) NOT NULL AUTO_INCREMENT ,
`customer`  int(11) NOT NULL ,
`total_sales`  decimal(15,2) NOT NULL ,
`max_sale`  tinyint(2) NOT NULL ,
PRIMARY KEY (`id`),
UNIQUE INDEX `customer` USING BTREE (`customer`)
)

当我在不同的查询中得到 (customer, max_sale) 和 (customer, total_sales) 时,我想知道是否可以填充表格,以便一位客户只有一行具有 max_sale 和 @ 两个值987654324@.

我的插入查询是:

INSERT INTO 
basic_data (customer, max_sale)
SELECT a.customer, a.max_sale
FROM sales a
 ....
GROUP BY customer;


INSERT INTO
basic_data (customer,total_value)
SELECT customer, SUM(sales) total_value
FROM sales a
GROUP BY customer;

我已经读过我可以使用ON DUPLICATE KEY UPDATE,但无法正确使用它。

我的尝试

INSERT INTO
basic_data (customer,total_value)
SELECT customer, SUM(sales) total_value
FROM sales a
GROUP BY customer
ON DUPLICATE KEY person UPDATE total_value = ...

没有成功,我认为这是因为ON DUPLICATE KEY 不适用于GROUP BY

知道如何以这种方式存储数据吗?非常感谢。

【问题讨论】:

    标签: mysql sql key duplicates bulkinsert


    【解决方案1】:

    更新 1

    INSERT INTO basic_data (customer,total_value)
    SELECT customer, total_value
    FROM
    (
        SELECT customer, SUM(sales) total_value
        FROM   sales a
        GROUP  BY customer
    ) c
    ON DUPLICATE KEY UPDATE total_value = c.total_value
    

    【讨论】:

    • 嗯,好像没有用,我收到了Unknown column 'a.total_value' in 'field list' 消息。
    • 试试ON DUPLICATE KEY UPDATE total_value = SUM(sales)
    • 我试过了,我得到了[Err] 1111 - Invalid use of group function
    • 不幸的是,它仍在插入重复的条目:(
    • 对不起,我搞砸了,尝试使用您的原始架构执行查询。
    猜你喜欢
    • 2012-10-06
    • 2018-05-01
    • 2019-05-21
    • 2017-02-09
    • 2014-06-05
    • 1970-01-01
    • 2014-03-10
    • 2012-06-11
    • 1970-01-01
    相关资源
    最近更新 更多