在postgresql中选择特定单元格的值

时间:2014-03-14 07:37:59

标签: sql database postgresql triggers

我目前在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';

我认为我的代码在大于号之后是错误的,但我不确定。我一直试图解决这个问题几个小时了。任何帮助将不胜感激。 谢谢!

1 个答案:

答案 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。您不需要该查询的类。