2010-09-28 79 views
0

我正在使用MySQL。我有3個表格我試圖在查詢中進行連接,但我無法看到我在做什麼錯誤的以下查詢:我的sql查詢使用左連接有什麼問題?

表1:書籍(書籍信息列表) 表2:書架成員擁有的書籍列表) 表3:書冊(書評清單)

我想要生成用戶在其書架中所有書籍的列表以及他們所做的任何評論。以下查詢僅給出了用戶已查看的書籍的列表;我想要他們所有的書。我認爲第二個LEFT OUTER JOIN會做到這一點 - 將書架標題連接到書評標題,但我沒有得到沒有評論的書(應該有很多)。刪除第二個JOIN語句(並將書架放在FROM語句中)可以讓我獲得沒有評論的標題列表,但它會顯示所有用戶的所有書評。

SELECT books.title, book_reviews.comments 
FROM books 
LEFT OUTER JOIN book_reviews ON books.ID = book_reviews.book_id 
LEFT OUTER JOIN bookshelf ON book_reviews.user_id = bookshelf.user_id 
WHERE bookshelf.book_id = books.ID 
AND bookshelf.user_id =1 

我想象我失去了一些東西很明顯,但我一直在閱讀有關的連接和去在我的邏輯,我視而不見。由於任何人誰可以幫我看看...

+0

他們能夠審查書籍,都沒有對他們的書架? – 2010-09-28 15:38:25

+0

是的,他們可以,但是對於這種情況,我只在他們的書架上尋找物品。該網站是以書架爲中心的。 – mandel 2010-09-28 15:42:19

回答

1

試試這個:

SELECT books.title, book_reviews.comments 
FROM bookshelf 
LEFT OUTER JOIN books ON books.ID = bookshelf.book_id 
LEFT OUTER JOIN book_reviews ON book_reviews.book_id = books.ID 
AND book_reviews.user_id = bookshelf.user_id 

WHERE bookshelf.user_id =1 
+0

就是這樣。我認爲,從書本而不是書架開始,我一定會專注於錯誤的東西。 – mandel 2010-09-28 15:51:53