通过复制现有行将新行插入表中

时间:2013-03-09 14:08:06

标签: mysql sql sql-insert

有一些问题涉及通过复制现有行来插入新行。

这个问题建立在它的基础上,但却大不相同。

我有一张9000+行的表格。大约有10列。第1列是自动增量,它是唯一键。

我想通过复制现有行中的所有内容来向表中插入完全相同的行数,除了明显的第1列,但除了第10列之外,它将根据现有行中第10列的值进行更改,例如:如果col 10在现有行中为23,则它变为52,如果col 10在现有行中为25则变为53.

所以基本上现有行和新行之间的唯一区别是col 10值(除了唯一ID)。 col 10将采用非常有限的数值。

这样的事情会起作用吗?

INSERT INTO mycooltable (col2, col3, col4, col5, col6, col7, col8, col9, col10) 
SELECT col2, col3, col4, col5, col6, col7, col8, col9, 52
FROM mycooltable WHERE col10 = 23

INSERT INTO mycooltable (col2, col3, col4, col5, col6, col7, col8, col9, col10) 
SELECT col2, col3, col4, col5, col6, col7, col8, col9, 53
FROM mycooltable WHERE col10 = 25

2 个答案:

答案 0 :(得分:1)

是的,这肯定有用。

请注意此处的INSERT语法的第三个示例:

INSERT [LOW_PRIORITY | HIGH_PRIORITY] [IGNORE]
    [INTO] tbl_name [(col_name,...)]
    SELECT ...
    [ ON DUPLICATE KEY UPDATE
      col_name=expr
        [, col_name=expr] ... ]

参考http://dev.mysql.com/doc/refman/5.5/en/insert.html

答案 1 :(得分:1)

INSERT INTO mycooltable (col2, col3, col4, col5, col6, col7, col8, col9, col10) 
SELECT col2, col3, col4, col5, col6, col7, col8, col9
,NewCol10= Case
`When Col10=23 then 52
`When Col10=25 then 53
`Else 55 --some default 
End                                                      
FROM mycooltable

以上脚本也可以使用