gpt4 book ai didi

MySQL 在使用 INSERT INTO SELECT ... ON DUPLICATE KEY UPDATE ... SQL 语句时创建新行而不是更新行

转载 作者:行者123 更新时间:2023-11-29 03:18:38 29 4
gpt4 key购买 nike

我遇到了这个查询的问题:

INSERT INTO unit_storage (user_id,diagram_id,amount)
SELECT uf.user_id,
uf.diagram_id,
uf.amount
FROM unit_factory uf
WHERE uf.production_finish_time < /*current unix epoch seconds*/
AND uf.user_id = /*provided user id*/ ON DUPLICATE KEY
UPDATE unit_storage.amount=unit_storage.amount+uf.amount

让我们从正在发生的例子以及我想要的效果开始......

从比较值中您可能已经猜到,production_finish_time 是整数列,其中以秒为单位的时间标记某个日期。

查看 unit_factory 表行:

+-----+----------+-------------+---------+-------------------------+--+
| id | user_id | diagram_id | amount | production_finish_time | |
+-----+----------+-------------+---------+-------------------------+--+
| 7 | 10 | 2 | 1 | 1521472903 | |
| 8 | 10 | 2 | 1 | 1521473704 | |
| 9 | 10 | 2 | 1 | 1521473729 | |
| 10 | 10 | 2 | 1 | 1521474294 | |
+-----+----------+-------------+---------+-------------------------+--+

运行查询后,unit_storage 表成为 unit_factory 表的副本:

+-----+----------+-------------+---------+--+
| id | user_id | diagram_id | amount | |
+-----+----------+-------------+---------+--+
| 16 | 10 | 2 | 1 | |
| 17 | 10 | 2 | 1 | |
| 18 | 10 | 2 | 1 | |
| 19 | 10 | 2 | 1 | |
+-----+----------+-------------+---------+--+

虽然我需要的结果是:

+-----+----------+-------------+---------+--+
| id | user_id | diagram_id | amount | |
+-----+----------+-------------+---------+--+
| 16 | 10 | 2 | 4 | |
+-----+----------+-------------+---------+--+

对于期望的结果,正确的查询是什么?

编辑:

根据要求,两个表的索引:

--
-- Indexes for table `unit_storage`
--
ALTER TABLE `unit_storage`
ADD PRIMARY KEY (`id`);

--
-- Indexes for table `unit_factory`
--
ALTER TABLE `unit_factory`
ADD PRIMARY KEY (`id`);

最佳答案

要触发 on duplicate key,必须有一个键:

ALTER TABLE unit_storage ADD CONSTRAINT key1 UNIQUE (user_id, diagram_id)

这是关于 SQL Fiddle 的一个工作示例.

关于MySQL 在使用 INSERT INTO SELECT ... ON DUPLICATE KEY UPDATE ... SQL 语句时创建新行而不是更新行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49469347/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com