UPDATE と INSERT をもじって、UPSERT と呼ぶそうです。へぇ~
SELECTの結果が0件ならINSERTそれ以外はUPDATEとしてもよいのかもしれませんが
これを1つのSQLで実行することができます。
Oracleでは 「MERGE」
主キーに該当するデータがあればUPDATE、なければINSERTを行います。MERGE INTO 表名1 [エイリアス名] USING 表名2 | 副問い合わせ [エイリアス名] ON ( 結合条件 ) WHEN MATCHED THEN UPDATE SET カラム名 = 値, … WHEN NOT MATCHED THEN INSERT (カラム名, … ) VALUES ( 値, … );
MySQLでは 「REPLACE」 または 「INSERT ON DUPLICATE KEY UPDAT」
INSERT ON DUPLICATE KEY UPDATでは主キーに該当するデータがあればUPDATE、なければINSERTを行います。REPLACEでは主キーに該当するデータがあればDELTE後INSERTを行い、なければUPDATEを行います。
ただし、検索条件が主キーではないとき、該当データを削除しUPDATEを行います。
INSERT INTO 表名 (カラム名1, カラム名2, ...) VALUES (値1, 値2, ...) ON DUPLICATE KEY UPDATE カラム名x=値x,カラム名y=値y, ...;
SQLiteでは 「REPLACE」 または 「INSERT OR REPLACE」
こちらはMySQLと違ってINSERT OR REPLACEの別名がREPLACEなので機能は同じで、主キーに該当するデータがあればUPDATE、なければINSERTを行います。
REPLACE INTO 表名(カラム名) VALUES (値);
0 件のコメント:
コメントを投稿