質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
INSERT

INSERTとは、行を追加する、コンピュータのデータベース言語SQLにおけるデータ操作言語(DML)ステートメントの1つである

PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

Q&A

1回答

3687閲覧

GENERATE_SERIESでコピーしたレコードを同じテーブルにINSERTする方法について

twin

総合スコア13

INSERT

INSERTとは、行を追加する、コンピュータのデータベース言語SQLにおけるデータ操作言語(DML)ステートメントの1つである

PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

0グッド

0クリップ

投稿2017/02/23 06:35

編集2017/02/23 06:58

先日似たような内容で質問いたしましたが、別の部分で詰まったため、ご教示頂けますと幸いです。

■実現したいこと
下記のテーブルがあった時、に以下のことを実現したいです。
①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 21INSERT22 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 | 555657

■試したこと
以下の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;

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ご依頼の内容を正確に理解していないかもしれませんが

sql

1create temp table shouhin_table (id bigint, category bigint, name text, 2primary key(id,category)); 3 4insert into shouhin_table values 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; 21 22insert into shouhin_table 23select id+n, category, name from shouhin_table s, 24GENERATE_SERIES((select max(id) from shouhin_table), 5*(select max(id) from shouhin_table), (select max(id) from shouhin_table)) n; 25 26select * from shouhin_table; 27

投稿2017/02/23 11:44

A.Ichi

総合スコア4070

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問