无法在 TRIGGER 中的 FROM 语句附近找出此错误
Can't figure out this error near FROM statement in TRIGGER
这可能是一个愚蠢的错误,但我无法弄清楚导致错误的原因。我正在尝试将一个计划中的员工成本总和与每次插入之前的项目预算进行比较。这是针对 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;
的查询
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
不能定义两次,也不能在[=之后定义15=].
可能的修复:
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
这可能是一个愚蠢的错误,但我无法弄清楚导致错误的原因。我正在尝试将一个计划中的员工成本总和与每次插入之前的项目预算进行比较。这是针对 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;
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
不能定义两次,也不能在[=之后定义15=].
可能的修复:
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