首页 > 解决方案 > MySQL - 创建新行并使用新 ID 插入现有数据?

问题描述

我有一个类似于以下的 MySQL 表,是否可以:

1)复制与“type = 42”相邻的现有“值” 2)在每条记录的末尾插入一个新行(追加) 3)将“type = 42”中找到的值添加到新行但更改从 42 到“206”的类型?如下图所示,BEFORE 和 AFTER。

这可能吗?

前:

+-------+------+-------+---------+---------+
|  id   | name | abbr  | type    | value   |
+-------+------+-------+---------+---------+
|  123  | HCT  | HCT   | 42      | XYZ     |
|       |      |       | 57      | ABC     |
|       |      |       | 131     | RST     |
|       |      |       | 208     | 110     |
|  358  | CBC  | CBC   | 42      | 9AB     |
|       |      |       | 32      | GHI     |
|       |      |       | 11      | SB1     |
|       |      |       | 22      | LLY     |
|       |      |       | 57      | JKL     |
|       |      |       | 131     | 32B     |
|       |      |       | 263     | POF     |
|  102  | BMP  | BMP   | 42      | 444     |
|       |      |       | 131     | 09N     |
|       |      |       | 263     | 77M     |
|       |      |       | 35      | XJJ     |
|       |      |       | 11      | X10     |
|       |      |       | 22      | PLP     |
+-------+------+-------+---------+---------+

后:

+-------+------+-------+---------+---------+
|  id   | name | abbr  | id_type | id_base |
+-------+------+-------+---------+---------+
|  123  | HCT  | HCT   | 42      | XYZ     |
|       |      |       | 57      | ABC     |
|       |      |       | 131     | RST     |
|       |      |       | 208     | 110     |
|       |      |       | 206     | XYZ     |
|  358  | CBC  | CBC   | 42      | 9AB     |
|       |      |       | 32      | GHI     |
|       |      |       | 11      | SB1     |
|       |      |       | 22      | LLY     |
|       |      |       | 57      | JKL     |
|       |      |       | 131     | 32B     |
|       |      |       | 263     | POF     |
|       |      |       | 206     | 9AB     |
|  102  | BMP  | BMP   | 42      | 444     |
|       |      |       | 131     | 09N     |
|       |      |       | 263     | 77M     |
|       |      |       | 35      | XJJ     |
|       |      |       | 11      | X10     |
|       |      |       | 22      | PLP     |
|       |      |       | 206     | 444     |
+-------+------+-------+---------+---------+

感谢您的任何帮助!

我是 MySQL 新手。

标签: mysql

解决方案


您应该能够使用INSERT ... SELECT查询来执行此操作:

INSERT INTO table1
SELECT id, name, abbr, 206, value
FROM table1
WHERE type = 42

请注意,我假设您要从带有 的行中复制id,nameabbrtype=42。如果您希望它们为空白(如在您的示例数据中),请将查询更改为

INSERT INTO table1
SELECT '', '', '', 206, value
FROM table1
WHERE type = 42

dbfiddle 上的演示


推荐阅读