从逗号分隔的值列表中选择临时表

时间:2015-07-11 22:41:27

标签: mysql

我有一个存储过程,其参数为IN id_list VARCHAR(65535)(由于无法将数组作为参数传递)。 id_list是一个内爆(胶水是逗号符号)整数数组。我这样用过:

CREATE PROCEDURE `some_procedure`(IN `id_list` VARCHAR(65535))
BEGIN
SET @`query`:= CONCAT(
    'SELECT
        *
    FROM
        `table` AS `tbl`
    WHERE
        `tbl`.`id` IN (',`id_list`,')');
    PREPARE `statement` FROM @`query`;
    EXECUTE `statement`;
END$$

但是如何在临时表中选择id_list值以便将来与其他表联接?

1 个答案:

答案 0 :(得分:-1)

您可以使用MySQL函数FIND_IN_SET

CREATE PROCEDURE `some_procedure` (IN `id_list` VARCHAR(65535))
BEGIN
    SELECT id 
    FROM table
    WHERE FIND_IN_SET(id, id_list);
END

但要注意长权重表,因为FIND_IN_SET忽略了你的表索引。

希望它有所帮助。