首页 > 解决方案 > 尝试解决 MYSQL 更新触发器的语法错误

问题描述

我正在尝试创建一个触发器以在更新Project表时更新Assign表,但我一直收到此错误: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'END IF

有谁知道我为什么会收到此语法错误?请注意,我是这方面的初学者,所以我的 SQL 语句可能完全错误。此外,我确信在我的 IF 语句中运行的查询是有效的,因为我已经在没有在触发器内的情况下自行运行它。

delimiter $$

CREATE TRIGGER update_trigger AFTER UPDATE ON Assign
FOR EACH ROW
  BEGIN
    IF OLD.projNo <> new.projNo THEN
    
    #RUN THIS QUERY TO UPDATE MY TABLE

    
        UPDATE Project p JOIN 
          (SELECT Project.projNo, COUNT(DISTINCT empid) as numEmployeeAssigned
            FROM (Project LEFT JOIN Assign ON Project.projNo=Assign.projNo) 
            GROUP BY projNo
            ) as tb 
            ON p.projNo = tb.projNo
            SET p.numEmployeeAssigned = tb.numEmployeeAssigned
            
     #END QUERY
     
    END IF
  END$$
delimiter;

标签: mysqlsqltriggersphpmyadminsql-update

解决方案


您可以增加或减少计数:

   UPDATE Project p
        SET p.numEmployeeAssigned = p.numEmployeeAssigned +
                                    (case when p.projNo = new.ProjNo then 1 else -1 end)
        WHERE p.projNo IN (old.ProjNo, new.ProjNo) AND
              old.ProjNo <> new.ProjNo;

推荐阅读