SQL Server:无法找到正确的“加入”#39;我想要的公式

时间:2016-07-04 20:44:44

标签: sql-server join

我试图找到实现这一目标的正确方法。假设我有3个表A,B和C.

我希望我的请求显示来自所有3个表的一些信息,但我想只显示A中记录的一行。

问题,如果我加入表,就是大多数时候很多B记录链接到一个A记录,更糟糕的是,有很多C链接到一个B,所以有时候,相同的A记录显示超过一百次......

我为B再次尝试select top(1),对C再次尝试top(1)但仍然会在同一个A的每100行写回top(1),尝试左连接...内连接。 ..

我试图找出如何分组,但仍无法找到合适的分组。我最终制作了很多嵌套选择,事实上,我的查询包含更多嵌套选择然后其他任何东西......它可以工作,但它需要永远......

  1. 如果我找到一种方法来删除大部分嵌套选择会更快吗?

  2. 这甚至可能吗?我的意思是,有人曾经设法为所有人完成这一行#A'记录查询?

2 个答案:

答案 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