2016-07-21 15 views
0

同じテーブルの最初の2行をコピーし、下のように編集したカラムを挿入します。mysql:カラムをコピーしてテーブル内の異なるエントリを持つ1つのカラムを編集します

Table 1 (ID is auto increment) 
     ID | CL1 | CL2 | CL3 
     1 | A | text1 | NULL 
     2 | B | text2 | NULL 

Table 2 
      ID | CL3 
      21 | 45 
      24 | 63 

Converted Table 1 
     ID | CL1 | CL2 | CL3 
     1 | A | text1 | NULL 
     2 | B | text2 | NULL 
     3 | A | text1 | 45 
     4 | B | text2 | 63 

私は1つの列を複製してすべての行をコピーして挿入する方法を知っていますが、異なる値の列を変更することは問題です。

以下

は1列ですべてのフィールドをコピーするクエリが変更されます:

INSERT INTO table1 (col1, col2, col3) 
    SELECT col1, col2, 1 
    FROM table1 LIMIT 2; 

をすべてのヘルプは大歓迎されます。

例:これで、table1 CL3の値を持つtable2を取得しました。他のテーブルからデータを取得し、コピー中に挿入することはできますか?

+0

コピーしたデータの3列目に古いID値が必要ですか? – ADyson

+0

IDは自動インクリメントされるので、上記の表からIDを残したのはなぜですか。 – Ravistm

+0

はい、私は3列の値を意味します。サンプルデータから、col3に挿入したい値は、実際には常に古いレコードの "ID"列の値に見えます。それは正しいのですか、それとも偶然ですか? – ADyson

答えて

0

1つのテーブルの最初の2つのレコードを別のテーブルの最初の2つの行の値で更新したい場合は、それぞれにシーケンス番号を追加してそれに基づいて結合する必要があると思います。

次のようなものですが、速くはありません。

INSERT INTO table1 (ID, CL1, CL2, CL3) 
SELECT NULL, a.CL1, a.CL2, b.CL3 
FROM 
(
    SELECT CL1, CL2, @cnt1:[email protected] + 1 AS cnt 
    FROM table1 
    CROSS JOIN (SELECT @cnt1:=0) sub0 
    ORDER BY ID 
    LIMIT 2 
) a 
INNER JOIN 
(
    SELECT CL3, @cnt2:[email protected] + 1 AS cnt 
    FROM table2 
    CROSS JOIN (SELECT @cnt2:=0) sub0 
    ORDER BY ID 
    LIMIT 2 
) b 
ON a.cnt = b.cnt 
関連する問題