2015-01-13 2 views
0

가입). 코멘트를 작성한 모든 사용자가 투표하지는 않습니다. 그래서 이것은 내 쿼리이지만 작동하지 않습니다.내가 4 개 테이블이 작업

SELECT * FROM comment a 
    LEFT JOIN vote b ON a.UserID = b.UserID 
    JOIN answer c ON b.AnswerID = c.AnswerID 
    JOIN user d ON a.UserId = d.UserID 
GROUP BY a.CommentID HAVING a.StoryID = 8 

이 쿼리가 투표를하지 않은 의견 작성자의 투표 결과를 왜 보여줄지 모르겠습니다. 고칠 수있게 도와 주시겠습니까? 정말 고맙습니다.

+0

"작동하지 않았습니다"는 매우 설명 적이 지 않습니다. 쿼리가 오류를 반환 했습니까? 예상치 못한 결과를 반환 하시겠습니까? 어떤 결과를 기대 했습니까? 'GROUP BY CommentId' 절이 주어진'CommentId'에 대해 반환 된 하나의 행으로 모든 투표, 응답 및 사용자 행을 "축소"하기 때문에 쿼리는 CommentId 당 하나의 행을 반환합니다. 이러한 테이블의 열에 대해 반환 된 값은 그룹의 일부 행에서 가져 오지만 어느 행은 불확정합니다. – spencer7593

+0

답변 해 주셔서 감사합니다. 투표하지 않은 한 해설 위원은 투표 결과를 표시합니다. 그의 투표 결과는 그가 투표하지 않았을 때 null이어야합니다. – Henry

답변

0

GROUP BY 및 HAVING 절이 잘못되었습니다.

SELECT * FROM comment a 
    LEFT JOIN vote b ON a.UserID = b.UserID 
    JOIN answer c ON b.AnswerID = c.AnswerID 
    WHERE a.StoryID = 8 
+0

의견을 게시했는지 여부에 관계없이 모든 사용자를 원한다면 '사용자'테이블에 'RIGHT JOIN'을 사용하고 싶을 것입니다. 누락 된 값은 NULL로 표시됩니다. – citizenen