2012-10-01 2 views
1

이 예제에서 두 테이블을 조인하고 있습니다.모범 사례 내부 선택

DECLARE @AA TABLE 
     (
      A1 INT, 
      A2 INT 
     )  
DECLARE @BB TABLE 
     (
      B1 INT, 
      B2 INT 
     ) 

INSERT INTO @AA values (1,1)  
INSERT INTO @AA values (2,2)  
INSERT INTO @AA values (3,3)  

INSERT INTO @BB values (1,1)  
INSERT INTO @BB values (2,2)  
INSERT INTO @BB values (3,3) 

SELECT A1, A2, B1, B2 from @AA a 
     JOIN @BB b on b.B1 = a.A1 
     where 1=1 
     and a.A1 in (1,2) 
     and b.B1 in (select max(bb.B1) from @BB bb JOIN @AA aa on bb.B1 = aa.A1 where aa.A1 in (1,2)) 

위의 코드는 내가 결과를 얻을 찾고 있기 때문에 노력하고 있습니다 : "2,2,2,2"는

이 할 수있는 더 효율적인 방법이 있나요? 내부 선택은 외부 선택과 거의 비슷하지만 나에게는 매우 어울리지 않습니다.

답변

3

당신은 오히려 같은 쿼리에 대한 필터에 그 결과를 사용하여 다음 max(B1)를 얻기 위해 한 번 쿼리를 실행보다

SELECT TOP 1 WITH TIES A1, 
         A2, 
         B1, 
         B2 
FROM @AA a 
     JOIN @BB b 
     ON b.B1 = a.A1 
WHERE a.A1 IN (1, 2) 
ORDER BY b.B1 DESC 

를 사용할 수 있습니다.