2012年11月13日火曜日

Android データがなければInsert、あればUpdate

データがなければInsert、あればUpdateを行いたい時があると思います。
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 件のコメント: