2013-09-27 86 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); 
相關問題