我有一张这样的表:
id | group_id | parent_group
---+----------+-------------
1 | 1 | null
2 | 1 | null
3 | 2 | 1
4 | 2 | 1
是否可以添加约束,以便在没有行group_id
等于行parent_group
的行时自动删除行?例如,如果我删除第1行和第2行,我希望自动删除第3行和第4行,因为没有更多行group_id
1。
答案 0 :(得分:0)
克莱门斯发布的答案让我得到了以下解决方案。我对触发器不是很熟悉;可能有任何问题,有没有更好的方法呢?
CREATE OR REPLACE FUNCTION on_group_deleted() RETURNS TRIGGER AS $$
BEGIN
IF NOT EXISTS (SELECT 1 FROM my_table WHERE group_id = OLD.group_id) THEN
DELETE FROM my_table WHERE parent_group = OLD.group_id;
END IF;
RETURN OLD;
END;
$$ LANGUAGE PLPGSQL;
CREATE TRIGGER my_table_delete_trigger AFTER DELETE ON my_table
FOR EACH ROW
EXECUTE PROCEDURE on_group_deleted();