Mysql — Где предложение IN не выбирает данные должным образом

у меня есть разделенная запятыми строка с одинарной кавычкой

  1. select * from demoProject WHERE id IN(1,2,3);

  2. set @ids := "'1,2,3'"; select * from demoProject WHERE id IN(@ids)

Первый запрос работает нормально, но второй запрос извлекает только данные со связанным идентификатором ‘1’. Где я ошибаюсь со вторым запросом?

2

Решение

Проблема в том, что вы вставляете STRING в оператор IN, чтобы получить условие: id IN('1,2,3'), Вы должны использовать динамический SQL в этом случае.

Также в MySQL вы можете использовать FIND_IN_SET () функция, чтобы найти номер в разделенном запятыми STRING. Так что это может помочь здесь:

set @ids := "'1,2,3'"; select * from  demoProject WHERE FIND_IN_SET(id,@ids);
0

Другие решения

попробуйте изменить свой идентификатор с

set @ids := "'1,2,3'";

в

set @ids := "'1','2','3'";
0

Это не работает, потому что @ids трактуется как строка Неявное преобразование в целое число всегда даст вам только первое число.

Единственный способ сделать это — использовать подготовленные операторы (которые в этом случае должны использоваться в хранимой процедуре):

DELIMITER $$
CREATE PROCEDURE sp_prep_stmt(IN ids int)
BEGIN
SET @sql = 'select * from demoProject WHERE id IN(?);';
PREPARE stmt FROM @sql;
EXECUTE stmt USING ids;
DEALLOCATE PREPARE stmt;
END $$
DELIMITER ;

Затем выполните процедуру с

CALL sp_prep_stmt('1, 2, 3');
0
По вопросам рекламы [email protected]