2016-07-26 1 views
-1

Ad (Id, AgentId, AdDesc, AdTitle, EmailId, ADate), AdComment (ComId, 이메일, 댓글, AdId) 및 MyLikes (LikeId, 이메일, AdId). 여기서는 세 개의 표를 합치고 모든 광고 ID (Ad.Id = AdComment.AdId) 및 모든 광고 ID에 대해 주어진 이메일을 기반으로 한 MyLikes의 좋아요 수에 기초하여 Ad 테이블의 모든 필드와 함께 AdComment 테이블의 주석 수를 표시해야합니다 (Ad.Id = MyLikes.AdId). 그룹화하여 3 개의 테이블을 합산하여 계산합니다.

난 그냥 광고에 참여 및 광고 댓글이 내가 사용하는 경우 -

SELECT * , (
SELECT COUNT(c.AdId) 
) AS ComCount 
FROM Ad a 
LEFT JOIN AdComment c ON a.Id = c.AdId 
GROUP BY a.Id 
ORDER BY a.Id DESC 

이 잘 작동된다. 나는 광고 및 MyLikes에 가입 할 때

또한 내가 사용 -이 제대로 작동

SELECT a.Id, (
SELECT COUNT(*) 
FROM MyLikes m 
WHERE (
m.email = '[email protected]' 
AND m.AdId = a.Id 
) 
) AS MyCount 
FROM Ad a 
LEFT JOIN MyLikes m ON a.Id = m.AdId 
GROUP BY a.Id 

.

하지만 3 개의 테이블 조인을 모두 시도해도 제대로 작동하지 않을 경우 잘못된 코멘트 값이 표시됩니다. 이를 위해 나는 내가이 세 테이블을 조인하고 원하는 결과를 얻을 수있는 방법

SELECT a.Id,a.AgentId,a.EmailId,a.AdTitle,a.AdDesc, (
SELECT COUNT(m.AdId) 
FROM MyLikes m 
WHERE (
m.email = '[email protected]' 
AND m.AdId = a.Id 
) 
) AS MyCount,(
SELECT COUNT(c.AdId) 
) AS ComCount 
FROM Ad a 
LEFT JOIN MyLikes m ON a.Id = m.AdId LEFT JOIN AdComment c ON a.Id = c.AdId 
GROUP BY a.Id ORDER BY a.Id DESC  

을 used-.

+2

샘플 데이터와 원하는 결과를 제공하십시오. –

답변

0

내가 여기에 하위 쿼리를 사용하여 하나 개의 옵션 대신 joins에서 데이터 count에있어, 제대로 질문을 이해하고있어 가정 : 당신이 correlated subqueries을 선호하는 경우

select a.Id, a.AgentId, a.EmailId, a.AdTitle, a.AdDesc, 
     b.AdIdCount, c.AdIdCount 
from Ad a 
     left join (select AdId, count(*) AdIdCount 
        from AdComment 
        group by AdId) b ON a.Id = b.AdId 
     left join (select AdId, count(*) AdIdCount 
        from MyLikes 
        where email = '[email protected]' 
        group by AdId) c ON a.Id = c.AdId 

, 다음이 작동합니다 :

select a.Id, a.AgentId, a.EmailId, a.AdTitle, a.AdDesc, 
     (select count(*) 
     from AdComment b 
     where a.Id = b.AdId), 
     (select count(*) 
     from MyLikes c 
     where c.email = '[email protected]' and 
      a.Id = c.AdId) 
from Ad a 
0

LikeID 및 ComId가 MyLikes 및 AdComment 테이블의 고유 ID 필드라고 가정하면 다음을 수행 할 수 있습니다. 한 쌍의 조인을 사용하고 각 테이블의 고유 ID 필드를 계산하십시오. -

SELECT a.Id, 
     a.AgentId, 
     a.EmailId, 
     a.AdTitle, 
     a.AdDesc, 
     COUNT(DISTINCT m.LikeId) AS MyCount, 
     COUNT(DISTINCT c.ComId) AS ComCount 
FROM Ad a 
LEFT OUTER JOIN MyLikes m ON m.email = '[email protected]' AND a.Id = m.AdId 
LEFT JOIN AdComment c ON a.Id = c.AdId 
관련 문제