所以我有这个存储过程:

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/

10-12 00:09