在更新语句之前删除组合键的冲突记录

时间:2019-05-30 09:58:48

标签: mysql

我有一个表,该表具有关于类型,entityId,userid的复合键。现在我出于某种原因想要更改表记录。更新记录出现问题,即更新语句给出了重复键之类的错误。

例如,我的查询就像-

UPDATE iap SET type = 'tour', entityId = 3 WHERE type = 'bundle' AND 
entityId = 2 

但是使用update语句,它会寻找退出记录,该记录中该用户已经具有我们要更新的游览和实体ID相同。 现在在这种情况下,我想删除捆绑类型为该记录的记录,因为我希望所有ID为2的捆绑包都成为ID为3的游览。 因此,如果存在ID为3的游览,那么我只想删除ID为2的捆绑包,而无需更新。

请问附近有什么可能的查询吗?

1 个答案:

答案 0 :(得分:2)

尝试一下。

CREATE TEMPORARY TABLE IF NOT EXISTS tmp_iap AS (SELECT id, user_id, type, entityId FROM iap where type='tour' AND 
entityId = 3);


DELETE from iap where type='bundle' AND entityId = 2 AND EXISTS (SELECT 1 FROM tmp_iap Where tmp_iap.user_id = iap.user_id)

如果有重要数据,请先备份。