先日似たような内容で質問いたしましたが、別の部分で詰まったため、ご教示頂けますと幸いです。
■実現したいこと
下記のテーブルがあった時、に以下のことを実現したいです。
①shyouhin_tableのレコードを全てコピーする
② ①でコピーしたレコードを、GENERATE_SERIESで指定した数だけ、shyouhin_tableにINSERTする
③ ②の時、PKの重複が起こらないようにINSERTを行い、かつ例のINSERT後にあるように、idが連番になるようにする
※nameの内容は同じで良い。
【備考】
コピー元のレコード数が変動したりした場合にも対応できるSQLを作成したい。
■例
SQL
1テーブル名:shouhin_table 2 id(PK) | category(PK) | name | 3 bigint | bigint | | 4--------+-----------------+--------------+ 5 1 | 1 | 商品1 | 6 1 | 2 | 商品2 | 7 1 | 3 | 商品3 | 8 1 | 4 | 商品4 | 9 1 | 5 | 商品5 | 10 2 | 1 | 商品1 | 11 2 | 2 | 商品2 | 12 2 | 3 | 商品3 | 13 2 | 4 | 商品4 | 14 2 | 5 | 商品5 | 15 3 | 1 | 商品1 | 16 3 | 2 | 商品2 | 17 3 | 3 | 商品3 | 18 3 | 4 | 商品4 | 19 3 | 5 | 商品5 | 20 21INSERT後 22 id(PK) | category(PK) | name | 23 bigint | bigint | | 24--------+-----------------+--------------+ 25 1 | 1 | 商品1 | 26 1 | 2 | 商品2 | 27 1 | 3 | 商品3 | 28 1 | 4 | 商品4 | 29 1 | 5 | 商品5 | 30 2 | 1 | 商品1 | 31 2 | 2 | 商品2 | 32 2 | 3 | 商品3 | 33 2 | 4 | 商品4 | 34 2 | 5 | 商品5 | 35 3 | 1 | 商品1 | 36 3 | 2 | 商品2 | 37 3 | 3 | 商品3 | 38 3 | 4 | 商品4 | 39 3 | 5 | 商品5 | 40 4 | 1 | 商品1 | 41 4 | 2 | 商品2 | 42 4 | 3 | 商品3 | 43 4 | 4 | 商品4 | 44 4 | 5 | 商品5 | 45 5 | 1 | 商品1 | 46 5 | 2 | 商品2 | 47 5 | 3 | 商品3 | 48 5 | 4 | 商品4 | 49 5 | 5 | 商品5 | 50 6 | 1 | 商品1 | 51 6 | 2 | 商品2 | 52 6 | 3 | 商品3 | 53 6 | 4 | 商品4 | 54 6 | 5 | 商品5 | 55 ・ 56 ・ 57 ・
■試したこと
以下のSQLだと、GENERATE_SERIESによって繰り返しINSERTが行われる度に、idに同じ値が使われてしまうため、実現できませんでした。
SQL
1SELECT 2 id, 3 category, 4 name 5 FROM shouhin_table, GENERATE_SERIES(1, 5) as n;
以下のSQLだとidは連番になるのですが、コピー元のレコード全てに同じidが使われてしまうため、実現できませんでした。
※コピー元がshouhin_tableのid"13"のレコードだとすると、新しくINSERTされるレコードのid"4"に対して、id"13"のcategoryが設定されてしまう。
SQL
1SELECT 2 (SELECT MAX(*) FROM shouhin_table) + n, 3 category, 4 name 5 FROM shouhin_table, GENERATE_SERIES(1, 5) as n;
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。