SQL:执行带有重复删除的UPDATE IGNORE

时间:2014-01-17 16:21:54

标签: mysql sql

假设我有下表,其中PRIMARY_KEY为parent_id, child_id

parent_id | child_id
----------+---------
        1 |        2
        1 |        3

我想执行一个查询,它会更新行并删除可能的重复项,以便以下查询:

UPDATE IGNORE table SET child_id = 2 WHERE child_id = 3; 

会导致:

parent_id | child_id
----------+---------
        1 |        2

我需要某种通用解决方案,以便我可以编写复杂的查询来实现这一目标。

1 个答案:

答案 0 :(得分:1)

如果MySQL支持在同一个表的触发器内对表进行修改,那么解决方案就会非常优雅。

CREATE TRIGGER prevent_duplicate BEFORE UPDATE ON table FOR EACH ROW
  BEGIN
    IF (SELECT COUNT(*) FROM table WHERE (parent_id, child_id) = (NEW.parent_id, NEW.child_id) > 0) THEN
      DELETE FROM table WHERE (parent_id, child_id) = (OLD.parent_id, OLD.child_id);
    END IF;
  END;

由于它不支持这样的功能,您可能需要更改应用程序逻辑以实现相同的功能,或者为这些更新创建存储过程。