The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

CREATE TRIGGER aus_user_membership_delete
    BEFORE DELETE
    ON aus_user_membership
    FOR EACH ROW
    BEGIN
        DECLARE done INT DEFAULT 0; --
        DECLARE a, b, c INT; --
        DECLARE cur1 CURSOR FOR
            SELECT
                BELOW.user_id, ABOVE.ancestor,
                (BELOW.degree + ABOVE.degree + 1)
            FROM   
                aus_user_ancestors AS BELOW,
                aus_user_ancestors AS ABOVE
            WHERE
                BELOW.ancestor = OLD.user_id
                AND ABOVE.user_id = OLD.member_of
            GROUP BY
                BELOW.user_id, ABOVE.ancestor,
                (BELOW.degree + ABOVE.degree + 1)
            HAVING
                COUNT(*) = 1
        ; --
        
        DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1; --
    
        OPEN cur1; --
    
        REPEAT
            FETCH cur1 INTO a, b, c; --
            DELETE FROM aus_user_ancestors WHERE
                user_id = a AND ancestor = b AND degree = c; --
        UNTIL done END REPEAT; --  
    END
;