MySQL创建存储过程报错“LEFT在此位置无效,期望;”如何解决
问题诊断
- 核心语法错误:不存在
LEFT INNER JOIN这类连接语法,SQL 标准中连接类型只能从以下两类中选择:- 内连接:写为
INNER JOIN或简写为JOIN,仅返回两张表匹配成功的记录 - 左外连接:写为
LEFT JOIN或完整写为LEFT OUTER JOIN,返回左表全部记录,右表匹配不到的字段返回 NULL
- 内连接:写为
- 补充配置遗漏:创建存储过程前需要临时修改语句分隔符,避免存储过程内部的分号被 MySQL 判定为整个
CREATE语句的结束标记,引发执行异常。
修正后的完整代码
你可以根据业务需要选择连接类型,以下为示例代码:
-- 临时修改语句分隔符为//,避免存储过程内部分号截断语句 DELIMITER // CREATE PROCEDURE addPayments() BEGIN INSERT INTO payment (pay_date, salary_amount, employee_id) SELECT curdate(), designation.salary, employee.id -- 如需仅生成有对应岗位的员工支付记录,可将 LEFT JOIN 替换为 INNER JOIN FROM employee LEFT JOIN designation ON employee.designation_id = designation.id; END // -- 恢复默认分号分隔符 DELIMITER ;
内容的提问来源于stack exchange,提问作者Yazeer
相关产品推荐
相关产品推荐

