概要
selectしたデータを使ってinsert , replaceするためのSQL。 selectとinsertを別々に実行するのではなく1文で済ませられる。 タイトルには「他のテーブルに」と入れたけど、同じテーブルでもOK。 (そんな機会はほぼないはず・・・)
以下のような機会に使う。
- CSVファイルを一時テーブルにインポートした後、 本番テーブルに取り込む
- マテリアライズドビューのようなものを作る
- テーブル間でデータをコピーする
insert ~ select
selectした結果をinsertする。
selectするカラム・型は挿入するテーブルのカラム・型と揃えること。
例. 「table_02」のデータを「table_01」に全てコピーする
insert into
table_01
select
*
from
table_02
;
例. カラムや条件を指定してselectした結果をinsertする
insert into
table_01 (
column_01
, column_02
, column_03
)
select
column_05
, column_06
, column_07
from
table_02
where
column_05 = XXXX
;
ユニークキーが重複している場合はエラーになるので、 必要があればあらかじめチェックしておくこと。
重複していない行のみをinsertしたい場合は以下参照のこと。
SQLite 3 INSERT時にキーが重複していたら挿入しないようにする
replace ~ select
selectした結果でreplaceする。
ユニークキーが重複している場合は置換される。
例.「table02」のデータを「table01」にマージする
replace into
table_01
select
*
from
table_02
;
例. カラムや条件を指定してselectした結果でreplaceする
replace into
table_01 (
column_01
, column_02
, column_03
)
select
column_05
, column_06
, column_07
from
table_02
where
column_05 = XXXX
;
replace構文については以下を参照のこと。
SQLite3 でレコードがあれば置換、なければ新規挿入する (replace)
selectしたデータでupdateをしたい場合は以下を参照のこと。
SQLite3 Select した結果でUpdateする(update from)
外部参考サイト
-
SQLite 公式サイト(英語)
https://www.sqlite.org/index.html -
SQLite Query Language: INSERT(英語)
公式のINSERT構文に関するドキュメント
https://www.sqlite.org/lang_insert.html -
SQLite Query Language: REPLACE(英語)
公式のREPLACE構文に関するドキュメント
https://www.sqlite.org/lang_replace.html