我熟悉在执行INSERT查询时使用ON DUPLICATE KEY构造。我想对UPDATE查询做同样的事情,但似乎在MySQL中不允许这样做,否则我只是不知道语法。
我的表有一个唯一索引,我希望我的UPDATE查询尽可能多地更新记录,并忽略或删除会导致重复键的记录。假设的查询看起来像这样:
UPDATE votes SET user = 'foo' WHERE user = 'bar'
ON DUPLICATE KEY <ignore update or delete row>;
我正在尝试合并数据库中的2个用户。如果该用户已经对某个主题进行了现有投票,则可以忽略重复投票,但是当发生这种情况时,我不希望整个查询失败。理想情况下,我想删除任何触发重复键的记录,如果可以将其转换为查询,那就更好了。
这将是一个相当罕见的事件,所以如果UPDATE不存在这个功能,我可以通过多个查询完成我想要的答案。
答案 0 :(得分:1)
您可以通过自我加入来检查:
if /?
无法在单个查询中合并set /?
和setlocal /?
。您需要使用事务单独执行它们以确保原子性。 UPDATE votes AS v1
LEFT JOIN votes AS v2 ON v1.topic = v2.topic AND v2.user = 'foo'
SET v1.user = 'foo'
WHERE v1.user = 'bar'
AND v2.user IS NULL
查询应仅删除基于主题重复的记录。
UPDATE