说我有下表:
表1
reply_user
其中key是整数主键,value是varchar。
现在,我想使用新密钥为表中的每个现有行创建一个重复行。每个新行的值将等于现有行的值,但前面有一个前缀(使用CONCAT)。但是,如果值中包含子字符串---------------------
| key | value |
---------------------
---------------------
| 0 | val0 |
---------------------
| 1 | val1 |
---------------------
| 2 | blah |
---------------------
,我只想运行此插入。
所以决赛桌应该是这样的:
val
有没有办法创建一个可以做这种事情的插入语句?这里有一些伪代码(不起作用),以便更好地了解我想要完成的任务。
---------------------
| key | value |
---------------------
---------------------
| 0 | val0 |
---------------------
| 1 | val1 |
---------------------
| 2 | blah |
---------------------
| 10 | pre_val0 |
---------------------
| 11 | pre_val1 |
---------------------
有没有办法实现这类事情?
答案 0 :(得分:0)
您的任务很容易产生key
碰撞。如果key
是PK,则在尝试两次插入相同值时会出错。无论如何:
CREATE TABLE table1(`key` INT PRIMARY KEY, `value` VARCHAR(100));
INSERT INTO table1(`key`, `value`)
SELECT 0,'val0'
UNION ALL SELECT 1 , 'val1'
UNION ALL SELECT 2 , 'blah';
INSERT INTO table1(`key`, `value`)
SELECT `key` + 10, CONCAT('pre_', `value`)
FROM table1
where `value` like '%val%';
的 SqlFiddleDemo
强>
输出:
╔══════╦══════════╗
║ key ║ value ║
╠══════╬══════════╣
║ 0 ║ val0 ║
║ 1 ║ val1 ║
║ 2 ║ blah ║
║ 10 ║ pre_val0 ║
║ 11 ║ pre_val1 ║
╚══════╩══════════╝
我建议不要向key
添加10,而是使用AUTOINCREMENT
。