【问题标题】:Can't figure out this error near FROM statement in TRIGGER无法在 TRIGGER 中的 FROM 语句附近找出此错误
【发布时间】:2021-12-31 20:20:21
【问题描述】:

这可能是一个愚蠢的错误,但我无法弄清楚导致错误的原因。我正在尝试将一个计划中的员工成本总和与每次插入之前的项目预算进行比较。这是给sqlite的,提前感谢您的任何回答。

%%sql
CREATE TRIGGER trg_ins_PlanEmployees BEFORE INSERT ON PlanEmployees
BEGIN 
    SELECT
        CASE
            WHEN NOT EXISTS (
                SELECT 1
                FROM Project pro
                INNER JOIN Plan ON pro.projectID = Plan.projectID
                INNER JOIN PlanEmployees ON Plan.pID = PlanEmployees.pID
                INNER JOIN Employee ON PlanEmployee.eID = Employee.eID
                WHERE SUM(cost) FROM Employee <= project.budget
            )
            THEN RAISE (ABORT, 'Over budget')
        END;
END;

【问题讨论】:

    标签: sql sqlite triggers


    【解决方案1】:

    查询

                SELECT 1
                FROM Project pro
                INNER JOIN Plan ON pro.projectID = Plan.projectID
                INNER JOIN PlanEmployees ON Plan.pID = PlanEmployees.pID
                INNER JOIN Employee ON PlanEmployee.eID = Employee.eID
                WHERE SUM(cost) FROM Employee <= project.budget
    

    语法不正确,因为

    WHERE SUM(cost) FROM Employee <= project.budget
    

    部分,因为SUM 是一个聚合函数,它不会评估为布尔值,并且它本身不正确,无法形成 where 子句,FROM 不能定义两次,也不能在 WHERE 之后定义。

    可能的修复:

                SELECT 1
                FROM Project pro
                INNER JOIN Plan ON pro.projectID = Plan.projectID
                INNER JOIN PlanEmployees ON Plan.pID = PlanEmployees.pID
                INNER JOIN Employee ON PlanEmployee.eID = Employee.eID
                WHERE SUM(cost) <= project.budget
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-02-27
      • 1970-01-01
      • 1970-01-01
      • 2012-06-05
      • 1970-01-01
      • 1970-01-01
      • 2021-01-18
      • 1970-01-01
      相关资源
      最近更新 更多