データがなければ挿入、あれば更新をいっぺんにする(SQL:MERGE)
以下のようなテーブルがあるとする。
CREATE TABLE users (
id VARCHAR(100) primary key,
name VARCHAR(100)
);
INSERT INTO users (id, name) VALUES
('001', 'Ichiro'),
('002', 'Kiyoko');
これに対して、以下のようなSQL文を用意する。
プログラムの中で使えるように、プレースフォルダーを
使った。
MERGE INTO users
USING (
SELECT CAST(? AS VARCHAR(100)) AS id,
CAST(? AS VARCHAR(100)) AS name
) AS data
ON users.id = data.id
WHEN MATCHED THEN
UPDATE SET name = data.name
WHEN NOT MATCHED THEN
INSERT (id, name)
VALUES (data.id, data.name)
たとえば、次のようにセットする。
pStmt.setString(1, "003");
pStmt.setString(2, "Jiro");
この場合は、挿入処理がおこなわれる。
また、次のようなデータであれば、
pStmt.setString(1, "002");
pStmt.setString(2, "Tomoyo");
更新処理が行われる。
カテゴリー: mariadb, memo, mysql, mysql8, SQL
タグ: merge, using
カウント: 172