Я хочу выбрать из таблицы, где поле находится в заданной строке csv, переданной в хранимую процедуру.
Каков самый быстрый способ сделать это? Должен ли я вставлять значения во временную таблицу и присоединяться к этому? Или есть способ сделать это с одним утверждением?
Спасибо
НОВЫЙ ОТВЕТ -
Хорошо, вам нужно сделать что-то подобное, как показано ниже. Я предполагаю, что ваша строка csv будет указана в переменной @str ниже. Кроме того, вам нужно убедиться, что ваша строка (или arraystring) должна иметь этот формат с одинарными кавычками для каждого элемента -
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 в том, что хранится proc. Таким образом, вы можете хранить все эти значения поля csv в таблице temp и писать запрос, используя IN -
select * from sourceTable
where fieldValue in (select csvFieldValue from #temptable)
Был ли поиск и нашел отличный ответ.:)
Используйте функцию строки MySql FIND_IN_SET.
Пример использования:
SET @csvStr = "val1,val2,val3";
SELECT Col1
FROM Table1
WHERE FIND_IN_SET(Col2, @csvStr) > 0;
Я отредактировал текущий ответ с помощью "Новый ответ" и "Старый ответ", указав, что новый ответ открывает вашу систему для уязвимости SQL Injection.