mysql - 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 查询来做到这一点?
谢谢!
解决方案
我们可以尝试使用INSERT INTO ... SELECT
with 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
.
推荐阅读
- angular - 如何使用我为测试创建的模拟库覆盖 Angular 中的库(例如路径)?
- mongodb - Springboot忽略MongoDB atlas uri,尝试连接hosts=[127.0.0.1:27017]
- android - Kotlin 通过索引从资源中获取字符串
- angular - 在多窗口应用程序中打开 Angular Material 对话框
- json - 为什么 JSON 解码器在程序之前运行良好且没有任何更改时返回 nil?
- apache-flink - Flink watermark:通过实现 WatermarkGenerator 发送水印的频率
- sql - 这两个使用 Count 函数的 select 语句有什么区别?SQL 甲骨文
- tizen - 获取系统设置值
- javascript - 我怎样才能知道谁是获胜者?
- karate - 我们可以在从另一个功能内部调用功能时传递方法和路径吗