2016-07-04 59 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 
相關問題