36

假设我有一个 SP,其SELECT语句如下,

SELECT product_id, product_price FROM product 
WHERE product_type IN ('AA','BB','CC');

但是进入该IN子句的数据必须通过包含值字符串的单个变量。下面有东西链接

SELECT product_id, product_price FROM product 
WHERE product_type IN (input_variables);

但它不是那样工作的。知道怎么做吗?

4

4 回答 4

54

像这样传递参数值 - 'AA,BB,CC'然后,使用FIND_IN_SET函数就足够了-

SELECT product_id, product_price
FROM product
WHERE FIND_IN_SET(product_type, param);
于 2012-10-29T07:33:34.680 回答
3

创建一个用户定义的函数,将逗号分隔的值转换为表,并通过将这两者连接起来可以获得所需的结果。

更多

于 2012-10-29T05:30:43.300 回答
2

使用变量传递字符串是一个问题假设这个解决方案

DELIMITER $$

CREATE DEFINER=`root`@`localhost` PROCEDURE `spTestListValues`(_list varchar(200))
BEGIN
        SET @LIST=_list; -- assume this a paramter from the stored procedure
    SELECT NULL AS Id,  '' AS Description --insert null value to be used for list box population
    UNION  
    (SELECT id, Description
    FROM test_table
    WHERE FIND_IN_SET(id,@LIST) ORDER BY Description ASC) ;

END

从其他查询窗口调用过程

call `spTestListValues`('4,5,3'); --no paramter currently for test

输出

ID Description
NUll 
1   TEST1 
4   TEST2
5   TEST3
于 2013-12-18T09:36:48.830 回答
-1

尝试使用准备好的语句:
https ://dev.mysql.com/doc/refman/8.0/en/sql-prepared-statements.html

于 2012-10-29T06:27:44.673 回答