У меня есть две таблицы, A и P.
A
________________
id | num_cars
----------
1 | 2
2 | 0
3 0
P
__________________________
id_driver | id_car
--------------------------
1 | Porsche
1 | BMW
A.id и P.id_driver относятся к одному и тому же человеку.Я создал ниже триггер.Идея заключается в том, что каждый раз, когда я добавляю новую строку в P для существующего водителя, соответствующая строка в A должна обновляться с учетом общего количества автомобилей, принадлежащих человеку с таким идентификатором.
CREATE OR REPLACE FUNCTION update_a() RETURNS trigger AS $$
BEGIN
IF TG_OP = 'INSERT' THEN
UPDATE A a
SET num_cars = (SELECT COUNT(NEW.id_driver)
FROM P p
WHERE (a.id = p.id_driver AND a.id=NEW.id_driver));
ELSIF TG_OP = 'DELETE' THEN
UPDATE A a
SET num_cars = num_cars - 1
WHERE a.id = OLD.id_driver AND a.num_cars<>0;
END IF;
RETURN NULL;
END;
$$ LANGUAGE plpgsql;
CREATE TRIGGER add_car
AFTER INSERT OR DELETE ON PARTICIPATION
FOR EACH ROW EXECUTE PROCEDURE update_a();
Триггер работает нормально, когда я добавляю строку в B для драйвера.Однако, если я затем добавлю строку для другого драйвера в B, остальные строки в A будут установлены обратно на 0. Я бы хотел, чтобы процедура запускалась только тогда, когда A.id = P.id_driver.Как я могу это сделать?