2016-11-22 212 views
1

我有這兩個查詢,我不能正確地結合它們。如何將這兩個查詢合併爲一個?

我想要得到一個特定的討論每一個註釋可以被存儲在圖像表圖片評論。

SELECT c.CommentID, c.Body, u.Name 
FROM Comments c 
JOIN User u ON u.UserID = c.InsertUserID 
WHERE c.DiscussionID = 1 

SELECT Path 
FROM Images 
WHERE commentID = ? 

這是我想出了,但它不工作:

SELECT c.CommentID, c.Body, u.Name, i.Path 
FROM Comments c 
JOIN User u ON u.UserID = c.InsertUserID 
LEFT JOIN Images i ON c.CommentID = i.ForeignID 
WHERE c.DiscussionID = 1 
+0

CommentID爲什麼會等於ImageID?顯示你的表格模式。表格如何相關。 –

+0

抱歉,錯字。 CommentID等於Images.ForeignID – crispychicken

+1

好的,下一個問題。什麼部分不工作,你看到什麼,你期望什麼。 –

回答

2
SELECT c.CommentID, c.Body, u.Name, (SELECT GROUP_CONCAT(Path SEPARATOR "\n") FROM Images i WHERE i.commentID = c.CommentID) as 'images' 
FROM Comments c 
JOIN User u ON u.UserID = c.InsertUserID 
WHERE c.DiscussionID = 1 

您會收到一排爲每個評論和所有評論圖片將在「圖像」領域。圖像將以換行符("\n")字符分隔。根據要求

JOIN版本:

SELECT c.CommentID, c.Body, NAME, GROUP_CONCAT(Path SEPARATOR "\n") AS 'images' 
FROM Comments c 
LEFT JOIN Images i ON(i.commentID = c.CommentID) 
WHERE c.DiscussionID = 1 
GROUP BY c.CommentID 

注意JOIN版本可能不會像子查詢的版本那樣高效。第一個查詢中的GROUP BY階段發生在子查詢級別上,而在第二個查詢的情況下,它發生在所有行已經加入之後。當然,查詢優化器可能會在這裏做一些魔術,它們可能會有相同的成本。

+0

也可以使用連接而不是選擇? – crispychicken

+0

@crispychicken查看更新後的答案。 – matt