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”

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

4

1 回答 1

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)然后使用过滤器中针对同一查询的结果。

于 2012-10-01T10:11:11.333 回答