2

既存の行をコピーして新しい行を挿入することについて言及しているいくつかの質問があります。

この質問はそれに基づいていますが、実質的に異なります。

9000行以上のテーブルがあります。約10列あります。列1は、一意のキーである自動インクリメントです。

明らかに列1を除いて、既存の行の列10の値に基づいて変更される列10を除いて、既存の行からすべてをコピーすることによって、存在するのとまったく同じ数の行をテーブルに挿入したいと思います。既存の行で23である場合は52になり、既存の行で列10が25の場合は53になります。

したがって、基本的に、既存の行と新しい行の唯一の違いは、列10の値です(一意のIDは別として)。また、列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
4

2 に答える 2

1

はい、これは間違いなく機能します。

INSERTここにある構文の3番目の例に注意してください。

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

于 2013-03-09T14:10:27.707 に答える
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

上記のスクリプトも機能します

于 2013-03-09T16:07:09.490 に答える