2016-08-17 32 views
-2

1つのテーブルからデータを読み込み、MySQLデータベースの別のテーブルに複数の行に挿入する必要があります。SELECTを使用して複数の行をINSERTするSQLクエリ

表1はのようになります。

表2において
ID, name, e-mail, phone, city, ..., .... 

のように、私はデータを挿入する必要があります。表1は、約3000行

私は私の推測がある

(row1) ID, "name", name 
    (row2) ID, "e-mail, e-mail 
    (row3) ID, "phone", phone 
    ... 
    ... 

何らかのforeachやdo..whileを使用する必要がありますが、動作するものは何も見つかりません。 誰も私にこれを行う手掛かりを与えることができますか?

+0

あなたの試行を表示できますか? – Rupsingh

+0

INSERT INTOテーブル2 VALUES(ID、 '名前'、名前)、 VALUES(ID、 'Eメール'、Eメール)、 VALUES(ID、 '電話'、電話) SELECT * FROM table1; 無効なSQL文があることがわかりました... – JErne

答えて

3

私はあなたの質問を正しく理解している場合、複数の行を返すtable1のクエリを実行し、それらをtable2に1つのループで挿入する必要があります。同様に、特定の結果をつかむために変更することができ

INSERT INTO table2 
    (name, email, phone) 
    SELECT name, email, phone 
    FROM table1; 

INSERT INTO table2 
    (name, email, phone) 
    SELECT name, email, phone 
    FROM table1 
    WHERE name = 'target person'; 

詳しい情報はhttp://dev.mysql.com/doc/refman/5.7/en/insert-select.htmlhttp://www.w3schools.com/sql/sql_insert_into_select.aspで発見することができますそれはINSERT INTO SELECT声明です。 SQL split values to multiple rows

EDIT:あなたはこれをやろうとしているようにあなたのコメントに基づいて

、それが聞こえます。

私はあなたが実際に が、分割する悪い習慣のようです 、であるとして、あなたの既存のテーブルのすべてのデータにアクセスできるように、ということとやりたいと思い状況を考えることはできません

あなたが要求している方法でのデータ。しかし、上記のスレッドのソリューションは、あなたがしようとしているものに適用できるはずです。

最終的には、あなたが実際にどのようにのデータを取得しているかを調べることをお勧めします。そのコードを変更するとより良いアイデアになるでしょう:)

+0

実際には、テーブル1の各返された行の結果を、テーブル2の複数の行に変換して、各行にテーブル1の結果のサブセットが含まれるようにします。 – JErne

+0

フィードバックありがとうございます!私は今あなたの仕事をよりよく理解し、それに応じて私の答えを更新しました。うまくいけば、それはもっと役に立ちました:) –

+0

ありがとう!それは実用的なソリューションのように見えます! 私はこれを行う必要がある理由は、私たちがWordpressに移動しているウェブサイトを持っているということです。古いサイトでは、Table1のようなすべてのユーザーがいましたが、使用する必要があるアドオンを持つWordpressは、ほとんどのユーザー情報をi Table2として持っています。私はマイグレーションツールを見つけることができませんでしたので、私はデータベースでこれを行う必要があります。 – JErne

0

私はこれをどうしたのかちょうど更新しました。私はデータベースサーバーへの完全なアクセス権がないので、データの追加/削除と新しいテーブルの作成だけができます。答えに示されているリンクに示唆されているように関数を作成することはできません。 データをループするのではなく、新しい行ごとにINSERTを行いました。 INSERT INTO table2(id、col2、col3) SELECT id、 'name'、name FROM table1; INSERT INTOテーブル2(id、col2、col3) SELECT id、 'email'、email FROM table1;

ご協力いただきましてありがとうございます。

関連する問題