【SQL】SELECTしたものをINSERT INTO する方法

Oracle

よく使いますよね、株信です。今回も解説していきます。

構文

INSERT INTO テーブルA(カラムA) SELECT カラムB FROM テーブルB;

例 INSERT INTO t_test(col1) SELECT user FROM t_user;

全て登録する場合

以下のようなt_userというテーブルがあったとします。
このテーブルから顧客コード1のものを空のt_promoに登録します。

UNAMECODE
鈴木1
田中1
佐々木2
木村3
INSERT INTO t_promo(NAME) SELECT UNAME FROM t_user WHERE CODE = 1;
NAME
鈴木
田中

このような感じt_promoにSELECTされたデータをそのままINSERT することができます。

存在してないものだけ登録する場合

続きで、すでにt_promoが以下のようになっている場合
存在してないものだけ登録することができます。

NAME
鈴木
田中
INSERT INTO t_promo(NAME) SELECT UNAME FROM t_user B
WHERE NOT EXISTS(SELECT 1 FROM t_promo A WHERE A.NAME = B.UNAME);
NAME
鈴木
田中
佐々木
木村

このような感じt_promoに存在しない分だけSELECTされたデータをINSERT することができます。

注意

*は使わないで列指定しましょう。

 よくあることとして、SELECT側又はINSERT側のどちらかだけカラム追加されたら実行するときにエラーになってしまいます。明示的に記載することをお勧めします。

タイトルとURLをコピーしました