我有一个具有唯一约束的表,我想在不违反唯一约束的情况下进行更新,以避免异常。
使用where
子句中的正确条件可以实现这一点。但是,使用PreparedStatement
,我希望避免必须设置两次值,一次用于设置值,另一次用于检查值。
我能做什么:
UPDATE mytable SET
col1 = ?,
col2 = ?, --has unique constraint
col3 = ?
WHERE
id = ?
AND NOT EXISTS (
SELECT *
FROM mytable
WHERE
col2 = ? AND
id <> ?
);
请注意,我必须输入两次col2
的值,因为我必须为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
);