как использовать WHERE IN MySQL хранимой процедуры - PullRequest
5 голосов
/ 21 марта 2011

Как передать массив и использовать WHERE IN внутри хранимой процедуры?

Нужно ли объединять входную строку или что-то еще?

Позволяет сказать

DELIMITER $$
DROP PROCEDURE IF EXISTS `abc`.`table1`$$
CREATE PROCEDURE  `abc`.`test`
(IN somestring VARCHAR(255))
BEGIN
    SELECT * FROM abc.table1 
    WHERE flight_type IN somestring
END $$
DELIMITER ;

Ответы [ 3 ]

4 голосов
/ 21 марта 2011

Вы можете использовать конкатенацию строк и оператор PREPARE для выполнения динамически построенных запросов.

somestring должен быть составлен в допустимом формате SQL, например '1','2','3'

DELIMITER $$
DROP PROCEDURE IF EXISTS `abc`.`table1`$$
CREATE PROCEDURE  `abc`.`test`
(IN somestring VARCHAR(255))
BEGIN
    @s=CONCAT("
    SELECT * FROM abc.table1 
    WHERE flight_type IN (",somestring,");")
    PREPARE stmt FROM @s;
    EXECUTE @s;
END $$
DELIMITER ;
1 голос
/ 21 марта 2011

Вы можете использовать FIND_IN_SET(), если somestring отформатировано a,b,c,d:

SELECT *
FROM abc.table1
WHERE FIND_IN_SET(flight_type, somestring)
0 голосов
/ 21 марта 2011

Это должно работать, пока somestring имеет форму

"(item1, item2, item3, ... )"

Если нет, вы можете отформатировать его соответствующим образом внутри вашего SP, но я не уверен, что это лучший метод.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...