内部选择的最佳实践

时间:2012-10-01 10:08:02

标签: tsql

在这个例子中,我正在加入两个表。

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”

有更有效的方法吗?内部选择与外部选择几乎相同,对我来说它看起来不太好。

1 个答案:

答案 0 :(得分: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),然后在针对同一查询的过滤器中使用该结果。