よく使いますよね、株信です。今回も解説していきます。
構文
INSERT INTO テーブルA(カラムA) SELECT カラムB FROM テーブルB;
例 INSERT INTO t_test(col1) SELECT user FROM t_user;
全て登録する場合
以下のようなt_userというテーブルがあったとします。
このテーブルから顧客コード1のものを空のt_promoに登録します。
UNAME | CODE |
鈴木 | 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側のどちらかだけカラム追加されたら実行するときにエラーになってしまいます。明示的に記載することをお勧めします。