我目前在postgresql中处理触发器,并且在尝试将新插入的行中的值与现有行中的值进行比较时遇到问题,其中两行在某个属性上匹配。示例:
我有一个带有值的表类(class_id,class_name,enrollment_limit) 另一个带有值(student_id,class_id)的表Enrolled_in
基本上我正试图在学生注册已达到其注册限制的课程时设置触发器。这是我的比较代码的样子。
IF ((SELECT count(student_id) as num FROM class, enrolled_in
where new.class_id = enrolled_in.class_id)
> (select enroll_lmt from class
where class_id = new.class_id ))
THEN RAISE EXCEPTION 'too many enrolled';
我认为我的代码在大于号之后是错误的,但我不确定。我一直试图解决这个问题几个小时了。任何帮助将不胜感激。 谢谢!
答案 0 :(得分:0)
对于触发器BEFORE INSERT
:
IF (SELECT count(*) >=
(SELECT enroll_lmt
FROM class c
WHERE c.class_id = NEW.class_id )
FROM enrolled_in e
WHERE e.class_id = NEW.class_id
) THEN
RAISE EXCEPTION 'too many enrolled';
END IF;
错误是这里不必要的交叉连接:FROM class, enrolled_in
。您不需要该查询的类。