,假设我有一个 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);
,但它不起作用。任何想法如何做?
将参数值如下 - 'AA,BB,CC'
。然后,使用Find_in_set函数 -
SELECT product_id, product_price
FROM product
WHERE FIND_IN_SET(product_type, param);
创建一个用户定义的函数,将逗号分隔的值转换为表,并且通过加入这两个可以得到所需的结果。
更多
使用变量传递字符串是一个问题,假设此解决方案
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
尝试使用准备的语句:
https://dev.mysql.com/doc/refman/8.0/en/sql-prepared-statements.html