2013-09-27 50 views
-2

你可以在WHERE IN子句中使用mysql @variable吗?你可以在WHERE IN(SELECT @var)中使用mysql @variable吗?

我尝试这样做:

SET @inlist = 
( 
SELECT GROUP_CONCAT(product_id) FROM products WHERE `status` = "new"  
); 

SELECT @inlist; -- shows comma separated values; 

SELECT * from products where product_id IN (SELECT @inlist);  

只会返回列表中的第一个产品。

我知道GROUP_CONCAT有一个默认的1k限制。

+0

你能解释你想达到什么吗?因为你的例子没有意义。你不需要任何变量。不,你不能以这种方式使用MySQL会话变量。 – peterm

+0

为什么使用变量时,你可以直接在where子句中使用查询? 'select * from product where product_id in(select product_id where status ='new')'(如果你想在子查询中浪费时间) – Barranka

+0

'@ inlist'是一个字符串,它不是一个实际的值列表。 – Barmar

回答

2

尝试这与FIND_IN_SET

SELECT * from products where FIND_IN_SET(product_id , @inlist); 
+0

编辑我的答案@barmar,这应该工作。 –

+0

FIND_IN_SET有效。 – sdfor

+0

不错,它适合你! –

2

您可以使用动态SQL做到这一点:

PREPARE stmt FROM CONCAT('SELECT * from products where product_id IN (', @inlist, ')'); 
EXECUTE stmt; 

如果你需要频繁地做到这一点,你可以把它放在一个存储过程,然后就做:

CALL yourProc(@inlist); 
相关问题