在这个例子中,我正在加入两个表。
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”
有更有效的方法吗?内部选择与外部选择几乎相同,对我来说它看起来不太好。
答案 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)
,然后在针对同一查询的过滤器中使用该结果。