2012-09-19 176 views
0

我在兩個表之間有多對多關係。我想通過與第二個表的第一個關係對第一個表進行排序,並僅從該表返回單個結果。這是在SQL Server上。我想是這樣的:SQL:按第一個關係對第二個表進行排序

SELECT a.retrieve_me 
FROM table_A AS a 
JOIN table_B AS b ON a.foo = b.foo 
JOIN table_C AS c ON b.bar = c.bar 
ORDER BY c.sort_me 

不幸的是,返回MN(K)結果,其中中號是「表-A」和N(K)的計數的數量關係帶有「table_C」的單行k。使其返回只是我想沒有過濾後我就SELECT條款使用DISTINCT和使用TOP(SELECT COUNT(*) FROM table_A)嘗試的結果,但也不是有效的語法。

任何想法?希望我能儘可能地表現出這一點。

編輯:

爲了清晰

table A 
------------ 
"joe" 1 
"betty" 2 
"george" 3 

table B 
------------ 
1 2 
1 3 
2 3 
2 4 
3 1 

table C 
------------ 
1 "ashton" 
2 "harding" 
3 "spring" 
4 "merry lane" 

我希望的結果「喬治」,「喬」和「貝蒂」,這是在訂單的訂單(返回喬治 - >阿什頓,喬 - >哈丁,貝蒂 - >歡快的車道)

+0

...我們可以得到一些樣本數據和預期的效果?正如@Dumitrescu所說,我在遵循您的要求方面遇到了一些麻煩。 –

+0

@ X-Zero對不起,很難按照。 1秒。 – wheaties

回答

3

如果我明白你需要正確的東西,因爲我覺得是很難跟着你..這應該這樣做:

SELECT a.nm 
FROM tablea a 
cross apply (select top 1 * 
     from tableb b 
     join tablec c on b.id2 = c.id 
     where a.id = b.id1 
     order by c.nm) bc 
order by bc.nm 

http://sqlfiddle.com/#!3/661c0/5/0

+0

查看修改,這仍然是一個正確的解決方案? – wheaties

+0

不..但是該死的關閉:)))。根據我對你最初的問題的理解,c表創建了多行而不是b表。 N(k)我相信應該是C表中單個行的數量。因爲你有不同的行。無論如何..現在檢查更新。 –

相關問題