1

この例では、2つのテーブルを結合しています。

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 

クエリを1回実行して取得するのではなくmax(B1)、同じクエリに対するフィルタでその結果を使用します。

于 2012-10-01T10:11:11.333 に答える