2016-11-22 20 views
1

私はこれらの2つのクエリを適切に組み合わせることができません。これらの2つのクエリをどのように組み合わせることができますか?

私はすべてのコメントは、画像テーブルに格納されてい複数イメージを持つことができ、特定の議論のコメントを取得したいです。

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 

をあなたは各コメントのために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フェーズはサブクエリレベルで行われ、2番目のクエリの場合はすべての行がすでに結合された後に実行されます。もちろん、クエリオプティマイザはここでいくつかの魔法を実行する可能性があり、同じコストを持つ可能性があります。

+0

selectではなくjoinでも可能ですか? – crispychicken

+0

@crispychicken更新された回答を参照してください。 – matt

関連する問題