2016-05-03 20 views
0

I持って以下の表、表名source_dataMySQLの動的挿入

column1 values  table col  group_flag index 
--   --   --  --   --   --  
id   1   users oid  1   1 
fName  dan  users firstName 0   1 
lName  opera  users lastName 0   1 
oid  2   users oid  1   2 
fName  fan  users firstName 0   2 
lName  popa  users lastName 0   2 
id   3   users oid  1   3 
fName  oana  users firstName 0   3 
lName  jon  users lastName 0   3 

データは、データのマッピングが、列「テーブル」に記載されたテーブルに挿入されるように表しています。 「group_flag」は、列データをグループ化するべきであることを表す。

だから私は、このようなINSERT文を生成するために、「source_data」テーブルからクエリを作成する方法

insert into users (oid,firstName,lastName) values (1,'dan','opera'); 
insert into users (oid,firstName,lastName) values (2,'fan','popa'); 
insert into users (oid,firstName,lastName) values (3,'oana','jon'); 

のように、「ユーザー」テーブルに3レコードを持っている必要があるこれらのデータによると?

答えて

2

今後、簡単に説明できるようにDDLを追加してください。私の解決策を確認してください

DDL

CREATE TABLE tmp (
    column1 VARCHAR(11), 
    `values` VARCHAR(11), 
    `table` VARCHAR(11), 
    col VARCHAR(11), 
    group_flag INT, 
    `index` INT 
); 
INSERT INTO tmp(column1,`values`,`table`,col,group_flag,`index`) VALUES('id','1','users','oid',1,1); 
INSERT INTO tmp(column1,`values`,`table`,col,group_flag,`index`) VALUES('fName','dan','users','firstName',0,1); 
INSERT INTO tmp(column1,`values`,`table`,col,group_flag,`index`) VALUES('lName','opera','users','lastName',0,1); 
INSERT INTO tmp(column1,`values`,`table`,col,group_flag,`index`) VALUES('oid','2','users','oid',1,2); 
INSERT INTO tmp(column1,`values`,`table`,col,group_flag,`index`) VALUES('fName','fan','users','firstName',0,2); 
INSERT INTO tmp(column1,`values`,`table`,col,group_flag,`index`) VALUES('lName','popa','users','lastName',0,2); 
INSERT INTO tmp(column1,`values`,`table`,col,group_flag,`index`) VALUES('id','3','users','oid',1,3); 
INSERT INTO tmp(column1,`values`,`table`,col,group_flag,`index`) VALUES('fName','oana','users','firstName',0,3); 
INSERT INTO tmp(column1,`values`,`table`,col,group_flag,`index`) VALUES('lName','jon','users','lastName',0,3); 

クエリ

select concat("insert into ",`table`,"(",GROUP_CONCAT(col),') VALUES (',GROUP_CONCAT(`values`),');') from tmp group by `index`,`table` 

そして

insert into users(oid,firstName,lastName) VALUES (1,dan,opera); 
insert into users(oid,firstName,lastName) VALUES (2,fan,popa); 
insert into users(oid,firstName,lastName) VALUES (3,oana,jon); 

を引き起こすあなたが望んでいたこのですか?

+0

+1ですが、** GROUP_CONCAT()に** ORDER BY col' **を追加する必要があります。そうしないと奇妙な結果が得られるかもしれません。 – fancyPants

+0

いくつかの同じ列の1つのグループだけが、このせん妄は – Nightw0rk

+0

おい、何?それを手に入れませんか?異なる列の順序や値を間違った列に挿入することになります。また、そこにいくつかの括弧がありません。 – fancyPants