作成日:2023-04-26, 更新日:2024-06-26
メモ
…どう説明すれば良いのか分からないので…テーブルの設定例とクエリとコメントをメモしておく
テーブルの設定例
- 「テーブル名: tbl_zebra」
- 「user_id, user_name」をユニークキーに設定
クエリ
insert into `tbl_zebra` ( user_id, user_name, created_at, updated_at ) select 14, '丸ごとシマウマ', 1682493331, 1682493331 # from `tbl_zebra` # テーブルを指定しなくともいけるっぽいということに気づいた(2024-06-26) from (SELECT 1) AS dummy where not exists ( select 1 from `tbl_zebra` where 1 and user_id = 14 and user_name = '丸ごとシマウマ' ) limit 1;
クエリのメモ
上記のクエリと同じだけど、コメントを色々と追加
insert into `tbl_zebra` ( user_id, user_name, created_at, updated_at ) # ▼以下が存在しないときだけ表示させるクエリ select 14, '丸ごとシマウマ', 1682493331, 1682493331 # from `tbl_zebra` # ←参照しないからココのテーブル名は(insertするテーブル以外で存在するテーブルなら)何でもOK(※A) from (SELECT 1) AS dummy # postgreSQLとMySQL5.7以降で利用可能。古いMySQLでは「FROM dual」を使う(※MySQLは基本「FROM dual」の方を使うらしい) where not exists ( # ▼存在しているか確認したいデータ select 1 # ←「not exists()」のフラグ用なので何でもいい。 from `tbl_zebra` where 1 and user_id = 14 and user_name = '丸ごとシマウマ' ) limit 1; # ←コイツがないと同じデータがいっぱいでてくる。「※A」で指定したテーブルのレコード数分?
メモ
▼チートシート代わり
insert into 対象テーブル ( カラムたち ) select 保存データ from 「対象テーブル以外で存在する適当なテーブル」 where not exits ( select 1 from 対象テーブル where 条件 ) limit 1 ;
※バルクインサートもいけそうな気がする