2016-07-04 62 views
0

我试图找到正确的方法来实现这一点。假设我有3个表A,B和CSQL Server:无法找到我想要的正确“加入”公式

我想我的要求,以显示所有3代表的一些信息,但我想这是A.

的问题记录只显示一条线,如果我加入表格,是否有大部分时间有很多B记录链接到一条A记录,更糟的是,有很多C链接到一条B记录,所以有时候,相同的A记录显示超过一百倍...

我试图select top(1)为B和top(1)再次为C,但仍,它返回top(1)写在每100行的相同A的,尝试了左连接...内加入...

我想弄清楚如何分组但仍然找不到合适的分组。我最终作出的嵌套查询,其实,我的查询中包含多个嵌套选择,然后别的...它的工作原理,但它需要永远很多...

  1. 难道是更快,如果我找到一种方法删除我的大部分嵌套选择?

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

+0

您可以使用EXISTS子句:-) –

回答

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语句,以符合您的要求。

+0

这看起来不错,它会更快吗? –

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