2013-09-27 4 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 제한이 있다는 것을 알고 있습니다. 자주이 작업을 수행해야하는 경우

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

, 당신은 단지 다음 저장 프로 시저에 넣어, 및 수 :

+0

달성하려는 것을 설명해 주시겠습니까? 당신의 본보기가 말이되지 않기 때문입니다. 당신은 그것에 대한 어떤 변수도 필요하지 않습니다. 그리고 그런 식으로 MySQL 세션 변수를 사용할 수 없습니다. – peterm

+0

왜'where' 절에서 직접 쿼리를 사용할 수있을 때 변수를 사용합니까? 'select * from product_id where (select product_id where status = 'new')'(하위 쿼리에서 시간 낭비를 원한다면) – Barranka

+0

'@ inlist'는 문자열이며, 실제 값 목록이 아닙니다. – Barmar

답변

2

당신은 동적 SQL과 그것을 할 수 FIND_IN_SET

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

내 대답 @barmar 편집,이 작동합니다. –

+0

FIND_IN_SET이 (가) 작동합니다. – sdfor

+0

당신을 위해 좋은 작품! –

2

으로 이것을 시도 해야 할 일 :

CALL yourProc(@inlist); 
관련 문제