一意の制約を持つテーブルがあり、例外を回避するために、一意の制約に違反することなく更新を実行したいと考えています。
これは、where
節で正しい条件を使用するだけで実現できます。ただし、 を使用するPreparedStatement
と、値を 2 回設定する必要がなくなります。1 つは設定用で、もう 1 つは確認用です。
私は何ができますか:
UPDATE mytable SET
col1 = ?,
col2 = ?, --has unique constraint
col3 = ?
WHERE
id = ?
AND NOT EXISTS (
SELECT *
FROM mytable
WHERE
col2 = ? AND
id <> ?
);
の値をcol2
2 回入力する必要があることに注意してくださいid
。
私がやりたいことは、次のようなものです:
UPDATE mytable SET
col1 = entry.col1,
col2 = entry.col2,
col3 = entry.col3
FROM
(SELECT * FROM
? AS id,
? AS col1,
? AS col2,
? AS col3
) AS entry
WHERE
id = entry.id
AND NOT EXISTS (
SELECT *
FROM mytable
WHERE
col2 = entry.col2 AND
id <> entry.id
);