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

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

新規登録して質問してみよう
ただいま回答率
85.43%
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回答

1871閲覧

構成の異なるテーブルをUNIONした結果をINSERTしたい

SH_1174

総合スコア10

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クリップ

投稿2021/11/01 06:41

編集2021/11/01 07:02

構成の異なるテーブルA,BをUNIONし、必要な項目に別名を定義し、その結果を別テーブルであるCテーブルにINSERTしたいのですが、以下の内容でやろうとすると失敗してしまします。

INSERT INTO "スキーマ".テーブルC VALUES(カラムA、カラムB、カラムC,now,固定値,now,固定値)
SELECT
カラムA,
カラムB,
カラムC
FROM
(SELECT
カラム1 as カラムA,
カラム2+カラム3 as カラムB,
カラム2+カラム4 as カラムC
FROM "スキーマ".テーブルA
)
UNION
(SELECT
カラム5 as カラムA,
カラム6+カラム7 as カラムB,
カラム6+カラム8 as カラムC
FROM "スキーマ".テーブルB)
as AAA
oder by カラムA

SELECT部分は正常に実行できますが、INSERTを含めて実行すると「syntax erro at or near "SELECT"」と出てしまい実行できません。
色々調べてみたのですが、解決方がわからず、悩んでおります。
初歩的な質問で申し訳ありませんが、どなかたお知恵をお貸しください。

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

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

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

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

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

guest

回答1

0

ベストアンサー

文法的にはVALUESとselectは同時に指定できません。
※やりたいことからするとValues指定になるのは誤りです。
以下の様な内容になるはずです。

SQL

1NSERT INTO "スキーマ".テーブルC (カラムA,カラムB,カラムC, カラムD, カラムE) 2 SELECT カラム1, カラム2, カラム3, Current_date, '固定値1' FROM "スキーマ".テーブルA 3UNION 4 SELECT カラム4, カラム5, カラム6, Current_date, '固定値2' FROM "スキーマ".テーブルB 5oder by 1

リファレンスも確認しておきましょう。

投稿2021/11/01 06:51

編集2021/11/01 08:39
sazi

総合スコア25254

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

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

SH_1174

2021/11/01 07:10

回答ありがとうございます。 すみません。SQLを簡略化したものにしてしまいました。 SQLを明確化しましたので、再度ご確認いただけると幸いです。
sazi

2021/11/01 08:37 編集

valuesはいりません。 insert into テーブル名([カラム名],,) selectの場合、このカラム名はテーブルのカラム名(要はselect項目の順番で見てどの項目に格納すれば良いかを指定するもの)なので、質問のnowや固定値の部分は実際に格納するテーブルのカラム名になり、そのカラムの位置に対応したselectでcurrent_dateなどを使った項目にすればいいと思います。
SH_1174

2021/11/02 06:37

VALUEを消して 以下の内容に修正したら上手くいきました。 ありがとうございます! INSERT INTO "スキーマ".テーブルC VALUES(カラムA、カラムB、カラムC,カラムD, カラムE, カラムF,カラムG) SELECT カラム1 as カラムA, カラム2+カラム3 as カラムB, カラム2+カラム4 as カラムC, now(), '固定値', now(), '固定値' FROM "スキーマ".テーブルA UNION SELECT カラム5 as カラムA, カラム6+カラム7 as カラムB, カラム6+カラム8 as カラムC, now(), '固定値', now(), '固定値' FROM "スキーマ".テーブルB oder by カラムA
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.43%

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

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

質問する

関連した質問