テーブルAには以下のようなデータがあります。
id | groupid | data | type |
---|---|---|---|
1 | 1 | A | data1 |
2 | 1 | B | data2 |
3 | 2 | A | data1 |
4 | 3 | B | data2 |
これらのデータをテーブルBにgroupid毎にまとめてselect insertしてさらにそれに連番を付与したいです。
望む結果
テーブルB
id(連番) | groupid | data1 | data2 |
---|---|---|---|
1 | 1 | A | B |
2 | 2 | A | |
3 | 3 | B |
当初想定していたSQL
SET @num=0; INSERT INTO tableB ( id, groupid, data1, data2, ) select (@num:=@num+1), (SELECT DISTINCT tableA.groupid FROM tableA WHERE groupid = group.id ), (SELECT tableA.dataA FROM tableA WHERE type = 'dataA' AND groupid = group.id), (SELECT tableA.dataB FROM tableA WHERE type = 'dataB' AND groupid = group.id) FROM group INNER JOIN tableA on group.id = tableA.groupid GROUP BY tableA.groupid
上記SQLだと
テーブルB
id(連番) | groupid | data1 | data2 |
---|---|---|---|
1 | 1 | A | B |
3 | 2 | A | |
4 | 3 | B |
groupテーブルが存在しているのでそこから集約してinsertを考えていましたが、連番付与する際にgroupbyが理由で抜け番となってしまいます。ROW_NUMBERが使えれば解決できるのかなとは思ったのですが、いかんせんmysqlのverが古く・・・
ご教授いただければ幸いです。<m(__)m>
回答2件
あなたの回答
tips
プレビュー