我试图找到实现这一目标的正确方法。假设我有3个表A,B和C.
我希望我的请求显示来自所有3个表的一些信息,但我想只显示A中记录的一行。
问题,如果我加入表,就是大多数时候很多B记录链接到一个A记录,更糟糕的是,有很多C链接到一个B,所以有时候,相同的A记录显示超过一百次......
我为B再次尝试select top(1)
,对C再次尝试top(1)
但仍然会在同一个A的每100行写回top(1)
,尝试左连接...内连接。 ..
我试图找出如何分组,但仍无法找到合适的分组。我最终制作了很多嵌套选择,事实上,我的查询包含更多嵌套选择然后其他任何东西......它可以工作,但它需要永远......
如果我找到一种方法来删除大部分嵌套选择会更快吗?
这甚至可能吗?我的意思是,有人曾经设法为所有人完成这一行#A'记录查询?
答案 0 :(得分:1)
试试这个:
Select * FROM A
OUTER APPLY (Select TOP 1 * FROM B Where A.colX = B.ColY) as New_B
OUTER APPLY (Select TOP 1 * FROM C Where A.colX = C.ColY) as New_C
您可能需要修改New_B和New_C Select语句以符合您的要求。
答案 1 :(得分:1)
您可以将公用表表达式(cte)与row_number
一起使用。这样的事情。
;with cte as (
select a.id,b.name,c.price,
row_number() over(partition by a.id order by b.name, c.price) rn
from a inner join b on a.id = b.a_id
inner join c on b.id = c.b_id
)
select * from cte
where rn=1