MySQL 存储过程的字符串问题。原始输出看起来不错,但在查询中返回空集

标签 mysql stored-procedures

MySQL 遇到一些问题。

具体来说,我编写了一个存储过程来接受一些输入,其中一个是逗号分隔的列表,用于动态查询。

例如:

SET @var1 = 10;
SET @var2 = 'banana';
SET @var3 = "\'Thing1\', \'Thing2\'";
CALL my_stored_proc(@var1, @var2, @var3);

存储过程代码本身查看传入的列表(在本例中为 @var3),并检查成员资格。程序看起来像这样:

SELECT item, some_stuff FROM table
WHERE item IN (variable3)
GROUP BY item;

现在,我查看了 @var3,原始输出似乎没问题。当我直接复制并粘贴文本,替换“IN(variable3)”语句中的variable3时,查询按预期工作!

尝试直接将双引号单引号转义位(请参阅@var3)传递给 CALL,但仍然没有成功。

任何帮助将不胜感激。

最佳答案

准确显示您如何调用该过程?但无论如何,这是一个错误的做法。相反,您应该使用临时表 -> 填充这些数据 -> 在 IN 子句中使用该临时表

CREATE TEMPORARY TABLE dumb (things varchar(20));

insert into dumb
select 'Thing1'
union
select 'Thing2'

在程序中使用该临时表

SELECT item, some_stuff FROM table
WHERE item IN (SELECT distinct things from dumb)
GROUP BY item;

关于MySQL 存储过程的字符串问题。原始输出看起来不错,但在查询中返回空集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39735251/

相关文章:

mysql - 选择结果集到变量中,然后在同一存储过程的更新中使用该变量

postgresql - 使用 regclass 的动态 SQL 的意外行为

用于准备语句的 MySQL 存储过程游标

尽管 SQL 查询有效,但 Azure 门户中的 Azure 存储过程不起作用

php - Mysql 返回表中列等于用户输入的所有值

java - mysql show processlist 显示 11 个永不消失的连接

mysql - 如何使用 UNION 合并两个具有 ORDER BY 的查询?

mysql - 循环遍历多个循环

mysql - 连接sql语句

php - 通过表单提交 Paypal 付款后将数据插入MySQL DB