在MySQL存储过程中的WHERE子句中使用IN param

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在MySQL存储过程中的WHERE子句中使用IN param相关的知识,希望对你有一定的参考价值。

我正在使用mysql和HeidiSQL,我想创建一个存储过程,它接受一个String参数并返回一个表。这是我尝试过的:

CREATE PROCEDURE sp(IN in_param VARCHAR(50))
BEGIN
  SELECT * FROM fact_table ft
  WHERE ft.param = @in_param
END

我这样打电话:

CALL sp('string_param');

该过程返回一个空表,因为@in_param在SP内部以某种方式NULL

我也喜欢这个:WHERE ft.param = in_param,但是当我跑它时我得到了一个错误,说SQL Error (1054): Unknown column 'in_param' in 'where clause'

有人能告诉我我做错了什么吗?

PS:我尝试手工创建它,还使用Heidi的Create new - > Stored routine wizard

答案

我终于找到了一个有效的解决方案:

CREATE PROCEDURE sp(IN in_param VARCHAR(50))
BEGIN
  DECLARE declared_in_param CHAR(50);
  SET declared_in_param = in_param;
  SELECT * FROM fact_table ft
  WHERE ft.param = declared_in_param;
END

因此,我们的想法是声明并为该IN参数设置一个新变量,并在SELECT语句的WHERE子句中使用该声明的变量。

我没有时间研究为什么这有效,但我会

以上是关于在MySQL存储过程中的WHERE子句中使用IN param的主要内容,如果未能解决你的问题,请参考以下文章

在存储过程 (MySQL) 上使用 WHERE IN

Where - OLAP Cube 中的 In 子句

7_mysql查询之where子句

mysql子查询在where in子句中

MySQL 不使用带有 WHERE IN 子句的索引?

在 WHERE 子句中使用变量的存储过程中的 DELETE 问题