所以我有这个存储过程:
DELIMITER $$
CREATE DEFINER=`admin`@`%` PROCEDURE `GetGoalDetail`(IN goalId int)
DETERMINISTIC
BEGIN
SELECT *
FROM actions
Where GoalId = goalId;
Select * From contributors
where GoalId = goalId;
Select * From discussions
where GoalId = goalId;
END
当我称它为:
CALL 'GetGoalDetail`(15);
我希望看到与goalId = 15有关的所有内容。但是第二个查询总是返回所有贡献者!为什么是这样?我缺少一些吗?
最佳答案
您的参数名称与表字段名称相同,这意味着MySQL不使用您的参数:
CREATE DEFINER=`admin`@`%` PROCEDURE `GetGoalDetail`(IN goalId int)
^^^^^^----this
SELECT *
FROM actions
Where GoalId = goalId;
^^^^^----^^^^^^--- which of those two is the field, and which is the parameter?
由于mysql无法知道您正在尝试执行
fieldname = parameter
,因此它只是将其解释为fieldname = fieldname
,或者根本就没有where子句。尝试将参数重命名为其他任何表中都不存在的参数,例如“ foobar”或其他。
关于mysql - where语句在存储过程中不起作用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24700679/