【发布时间】:2010-11-24 09:55:24
【问题描述】:
我想从一个表中进行选择,其中一个字段位于传递给存储过程的给定 csv 字符串中。
最快的方法是什么?我应该将值插入临时表并加入吗?或者有没有办法用一个语句来做到这一点?
谢谢
【问题讨论】:
我想从一个表中进行选择,其中一个字段位于传递给存储过程的给定 csv 字符串中。
最快的方法是什么?我应该将值插入临时表并加入吗?或者有没有办法用一个语句来做到这一点?
谢谢
【问题讨论】:
做了一些搜索,找到了一个很好的答案。:)
使用MySql的字符串函数FIND_IN_SET。
使用示例:
SET @csvStr = "val1,val2,val3";
SELECT Col1
FROM Table1
WHERE FIND_IN_SET(Col2, @csvStr) > 0;
我用“新答案”和“旧答案”编辑了当前答案,指出新答案会使您的系统面临 SQL 注入漏洞。
【讨论】:
新答案-
你必须按照下面给出的那样做。 我假设您的 csv 字符串将在下面的变量 @str 中给出。否则,您需要确保您的字符串(或数组字符串)应该具有这种格式,每个元素都带有单引号 -
set @str = "'some1','some2','some3'";
set @qry1 = CONCAT('select * from testing where col1 in (',@str,')');
prepare stmt1 from @qry1;
execute stmt1;
deallocate prepare stmt1;
旧答案-
我假设您会将 csv 文件路径传递给存储过程,并读取该存储过程中 csv 中的行。所以基本上你可以将所有这些 csv 字段值存储在临时表中并使用 IN 编写查询 -
select * from sourceTable
where fieldValue in (select csvFieldValue from #temptable)
【讨论】: