2012-10-01 53 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

你可以使用

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 

而不是運行一次查詢,以獲得max(B1)然後使用這個結果在對同一個查詢的過濾器。