2015-06-11 98 views
0

對於多對多,我有三個表:作者,作者,書籍。我想從authorhip中選擇行,並根據此行所屬的作者按字母順序排序。 例子:根據聯結表的結果排序其外鍵所屬的行的結果

-- Authors -- 
ID Name 
1 Peter 
2 Gregory 
3 Daniel 

-- Authorships-- 
ID AuthorId BookId 
1 1   1 
2 2   1 
3 3   1 

-- Books-- 
ID Name 
1 Foobook 

我想編寫一個返回的所有行屬於特定本書作者於是命令由作者姓名結果的select語句。

因此,像這樣:

SELECT * FROM Authorships WHERE BookId = 1 ORDER BY (Authors.Name???); 

除了我需要訂購的結果。 我明白這個問題可能看起來很愚蠢,因爲它的解決方法/效率低下,但我正在處理大量遺留代碼,並且不允許真正改變其他任何東西。

謝謝。

+0

你必須'JOIN'用'Authors'表得到'Name'。然後你可以在'ORDER BY'子句中加入'Name'。 –

回答

1

這將工作:

SELECT auth.* FROM Authorships auth, Authors au, Books bk WHERE auth.BookId = bk.ID and auth.AuthorId = au.ID ORDER BY au.Name 

SQLFiddle鏈接: SQLFiddle

+0

你好,感謝您的快速回答,我設法將其移植到我的分貝,它完美的作品。然而,它有點複雜:我在聯結表中有一個名爲contributor的列:因此,一行定義了一個作者或貢獻者:[link](http://sqlfiddle.com/#!9/ 251a4/1) –

+0

你現在想要什麼? –

+0

你的問題解決了嗎? –