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/