我想从一个表中选择一个字段在给定的csv字符串中传递给存储过程。
最快的方法是什么?我应该将值插入临时表并加入到该表中吗?或者有一种方法可以用一个陈述来做到这一点吗?
由于
答案 0 :(得分:1)
新答案 -
你必须做下面这样的事情。 我假设您的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;
OLD ANSWER -
我假设您将csv文件路径传递给存储过程并读取该存储过程中csv中的行。因此,基本上您可以将所有这些csv字段值存储在临时表中,并使用IN -
编写查询select * from sourceTable
where fieldValue in (select csvFieldValue from #temptable)
答案 1 :(得分:0)
做了一些搜索并找到了一个很好的答案。:)
使用MySql的字符串函数FIND_IN_SET。
使用示例:
SET @csvStr = "val1,val2,val3";
SELECT Col1
FROM Table1
WHERE FIND_IN_SET(Col2, @csvStr) > 0;
我使用“新答案”和“旧答案”编辑了当前答案,指出新答案会将您的系统打开到SQL注入漏洞。