Как в MySQL использовать определяемую пользователем переменную в предложении WHERE IN?

Я не понимаю, почему это не работает. Может кто-нибудь объяснить, что мне нужно делать?

SET @my_list = '2,6,8,10,12,13,14,18,19,21';

DELETE FROM my_table WHERE my_table.table_id IN (@my_list);

person Jesse Greathouse    schedule 18.10.2011    source источник
comment
возможный дубликат Передать строку в SQL, ГДЕ В   -  person martin clayton    schedule 19.10.2011


Ответы (1)


Он интерпретирует @my_list как один идентификатор, поэтому вы просите его удалить из my_table, где ваш идентификатор представляет собой строку «2,6,8,10,12,13,14,18,19,21».

Вы могли бы попробовать

SET @my_list = '2,6,8,10,12,13,14,18,19,21';
SET @exec = CONCAT('DELETE FROM my_table WHERE my_table.table_id IN (', @my_list ,')');
EXECUTE (@exec);
person bombnomnom    schedule 18.10.2011
comment
Спасибо за ответы. Есть ли способ превратить my_list в фактический тип списка, который понимает mysql, чтобы мне не пришлось делать concat? Я просто хочу подключить список к набору запросов на удаление, которые все должны использовать один и тот же список. Это потому, что существует множество таблиц, которые имеют отношения внешнего ключа, и поэтому для всех них должен быть удален один и тот же список идентификаторов. - person Jesse Greathouse; 19.10.2011