2016-10-04 3 views
0

1 차 선택에서 샘플 코드MySQL이 :

-- 1st select, getting AssetID from asset table 
SELECT GROUP_CONCAT(AssetID) 
INTO @AssetIDs 
FROM asset; 

-- 2nd select, use @AssetIDs in an IN clause 
SELECT AssetID 
from asset 
where AssetID IN (@AssetIDs) 

참조하시기 바랍니다 변수에 ID의 목록을 반환하고, IN 절에서 그 변수를 재사용, 그것은 10 개 ID를 반환하고 그 ID는 그래서 @AssetIDs 에 저장하세요 나는 그러나 @AssetIDs = '1,2,3,4,5,6,7,8,9,10'

, 두 번째 select 항상 반환 최초의 ID를 상상 1.

사람이 나를 다시 그 변수에 ID의 목록을 선택하는 방법을 찾는 데 도움을 그 클로스에서의 변수 이자형?

+3

왜 변수를 사용합니까? 그냥 (자산에서 AssetID 선택) - 당신이해야 할 일은 http://stackoverflow.com/questions/21101211/mysql-variable-in-clause –

+1

@AlexK를 참조하십시오. 어쨌든 'IN'이없는 가장 단순한 질의로서 'asset에서 AssetID 선택하기'로 내려갑니다. – Drew

+0

@drew ha yes 좋은 점 –

답변

0

대신 tmp 테이블을 사용했습니다.

DROP TEMPORARY TABLE IF EXISTS tmpassetlist; 
CREATE TEMPORARY TABLE tmpassetlist AS 
(
    SELECT AssetID 
    FROM asset 
    WHERE (condition) 
); 

그런 다음 이렇게 조인 :

SELECT AssetID 
from asset JOIN tmpassetlist 
ON asset.AssetID = tmpassetlist.AssetID 

나는 목록이 더 이상 얻을 때 IN 절은 매우 느리게 얻을 수 있기 때문에 현명한 또한 더 나은 성능을 생각합니다.