質問: ### 前提・実現したいこと [MySQL] WordPressで作成されるデータ(テーブルA)のデータをテーブルBへInsert処理したいです。 ※単純にSelect-Insertではなく、1データを1行形式にしたいです。 そこで、 1テーブルAのpost_idだけをSelectした一時テーブルを作成() 2一時テーブルをループ 3テーブルAの条件にpost_idをセットして、テーブルBへInsert と考えたのですが、繰り返し処理がそもそもできるのかと疑問に思いました。 ⇒procedureを使用? テーブルAの構造 | 列1 | 列2 | 列3 | 列4 | | --- | --- | --- | --- | | meta_id | post_id | meta_key | meta_value | データの中身は下記のような感じです。 | meta_id | post_id | meta_key | meta_value | | --- | --- | --- | --- | | 1 | 1 | name_family | 苗字A | | 2 | 1 | name_first | 太郎 | | 3 | 1 | postal | 000-0000 | | 4 | 1 | pref | 東京都 | | 5 | 1 | address | 〇〇区△△ | | 6 | 2 | name_family | 苗字B | | ・・・ | | | | テーブルBの構造 | 列1 | 列2 | 列3 | 列4 | 列5 | | --- | --- | --- | --- | --- | | post_id | name | zip | prefecture | address | | 1 | 苗字A 太郎 | 000-0000 | 東京都 | 〇〇区△△ | | 2 | 苗字B | | | | | ・・・ | | | | | 表がわかりづらくてすみませんが、お力を貸してください。
回答: 集計すれば、`insert into select`で可能です。 ``` insert into テーブルB select post_id , max(case when meta_key='meta_family' then meta_value end) , max(case when meta_key='postal' then meta_value end) , max(case when meta_key='pref' then meta_value end) , max(case when meta_key='address' then meta_value end) from テーブルA group by post_id ```