2014-02-12 44 views
-3

我在這方面花了大量的時間,但我仍然沒有完全正確。編寫正確的SQL查詢

顯示標題,標題和擁有多個作者的所有書籍的作者數量。我有這個,但不認爲這是完全正確的。使用3個表格(標題,titleauthor和作者)。標準不應該是au_id和它的次數嗎?我的代碼爲每個title_id返回25的奇怪列。我想了解如何編寫正確的語法......來自羅嗦的問題。

SELECT titles.title_id, titles.title, COUNT(titleauthor.au_id) AS nbrAuthors 
FROM titles CROSS JOIN titleauthor 

GROUP BY titles.title_id, titles.title 

HAVING COUNT(titleauthor.au_id) >1 

更新的代碼:我認爲就是這樣!寫出僞代碼對這個有很大的幫助。

SELECT titles.title_id, titles.title, COUNT(titleauthor.au_id) AS nbrOfAuthors 

FROM titles LEFT JOIN titleauthor ON titles.title_id = titleauthor.title_id 
GROUP BY titles.title, titles.title_id 
HAVING COUNT(titleauthor.au_id)>1; 
+0

'一個JOIN b加入C ... GROUP BY ...' – Mihai

+3

你甚至知道你爲什麼使用'CROSS JOIN'。 – user2989408

+2

爲什麼使用交叉連接?我想你需要弄清楚如何將titleauthor加入標題。 – Andrew

回答

1

無論何時將多個表連接在一起,都需要指定重疊的位置。

例如,在這裏,我想你想添加以下內容:

WHERE titles.title_id = titleauthor.title_id 
AND titleauthor.au_id = authors.au_id 

你可能見過下面的一個極大次,但記住,語法是:

SELECT foo, etc FROM tables WHERE conditions ORDER BY/GROUP BY some_field 
+0

不知道您在編輯代碼之前是否已發佈。出現我解決了這個問題,現在終於結束了這一天。令人不安的是這是更容易的問題之一,但我首先解決了其他問題。感謝您的指導......我收到的每一點信息或教育都是值得讚賞的。 – allendks45