存在チェックINSERT文 重複行を挿入しない方法



データを登録する時に同一のデータがある場合は挿入したくないって時に使えるSQL。

同一のデータが入っている場合エラーが出たりで困ります。
これを使用すれば同一行は挿入しないようにしてくれます。

説明用サンプルテーブル
CREATE TABLE IF NOT EXISTS `M_USER` (
  `MAIL_ADDRESS` varchar(50) DEFAULT NULL COMMENT 'メールアドレス',
  `PASSWORD` varchar(50) DEFAULT NULL COMMENT 'パスワード',
  PRIMARY KEY (`MAIL_ADDRESS`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='ユーザマスタ' AUTO_INCREMENT=1 ;

通常のSQL
INSERT INTO
	M_USER
VALUES
	('hoge', 'piyo')
これをそのまま実行すると初回はそのまま登録されますが、既に同じ【MAIL_ADDRESS】が登録されている場合はエラーとなってしまいます。


存在チェックSQL
INSERT INTO
	M_USER
SELECT
	'hoge',
	'piyo'
FROM
	DUAL
WHERE
	NOT EXISTS(
		SELECT
			'X'
		FROM
			M_USER
		WHERE
			MAIL_ADDRESS = 'hoge'
	);
DUALを使ってダミーテーブルにします。DBによっては使えなかったりするので注意してください。
対象のテーブルに対象データが存在するかをNOT EXISTSを使って存在しない場合は行を表示するようにします。
SELECT INSERT文なので出力された行がINSERTされます。
もし対象のデータが存在する場合は行が表示されないのでデータも挿入されることはありません。

これでデータの登録時にエラーが出されなくなりました。
ただ、データが存在する場合はUPDATEを行う場合は地道にSELECTしてデータの存在確認をしていくのがいいのかも知れません。


Comments
  1. 匿名

    ありがとうございます

コメントを残す