首页 > 解决方案 > MySQL - 复制或更新一个表中的更改行

问题描述

我有一个像这样的数据库表:

group | detailsID | price
EK    |         1 |  1.40
EK    |         2 |  1.50
EK    |         3 |  1.60
H     |         1 |  2.40
H     |         2 |  2.50

现在我想将“EK”组中的数据复制到“H”组,因此必须针对 detailsID 1 和 2 调整 detailsID 的价格,并且必须为组“H”插入 detailsID 3 的条目。

如何使用一两个 MySQL 查询来做到这一点?

谢谢!

标签: mysql

解决方案


我们可以尝试使用INSERT INTO ... SELECTwith ON DUPLICATE KEY UPDATE

INSERT INTO yourTable (`group`, detailsID, price)
SELECT 'H', detailsID, price
FROM yourTable t
WHERE `group` = 'EK'
ON DUPLICATE KEY UPDATE price = t.price;

但这假设存在一个唯一的键(group, detailsID)。如果这不可能,那么这种方法就行不通。

作为替代方案,我可以分两步执行此操作。首先,删除H组记录,然后插入H您期望的更新记录。

DELETE
FROM yourTable
WHERE `group` = 'H';

INSERT INTO yourTable (`group`, detailsID, price)
SELECT 'H', detailsID, price
FROM yourTable
WHERE `group` = 'EK';

我使用上述方法是因为单个更新无法满足您的要求,因为还需要插入新记录。

请注意,您应该避免使用保留的 MySQL 关键字来命名列和表,例如GROUP.


推荐阅读