SQL大量插入基于表中的现有值?

时间:2016-05-06 15:59:07

标签: mysql database insert

说我有下表:

表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 |
---------------------

有没有办法实现这类事情?

1 个答案:

答案 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