2013-10-11 2 views
2

사이에서 쿼리를 선택 SQL :내가 세 개의 테이블이 3 개 테이블

ITEMDISPLAYCOuNTS을 * 게시물과 howmanytimes이

postid, 계산하는 표시이 테이블의 저장,

게시물을 whodisplayedid * 게시 된이 테이블에는 어떤 ?

:

postid은, 내가 말하고자하는 것은, 그 후, 얼마나 많은 시간, 사용자 이름이 아닌 사용자 ID와 표시 누가

사용자 이름, ASPNET_USERS

사용자 ID

을 whopostedid 출력

사용자 이름 표시, 사용자 이름 모두 표시, 개수

다음 코드를 작성했지만 제대로 작동하지 않습니다.

SELECT u1.UserName, u2.UserName, ItemDisplayCounts.Count 
FROM ItemDisplayCounts AS i, Posts AS p, aspnet_Users AS u1, aspnet_Users AS u2 
WHERE p.UserId = u2.UserId AND i.UserId = u1.UserId AND i.PostId = p.PostId 

누구든지 수정을 제안 할 수 있습니까?

+0

"제대로 작동하지 않는다"는 것은 무엇을 의미합니까? 어떤 RDBMS를 사용하고 있습니까? –

답변

3

나는 (당신의 적절한 ANSI 것들에 조인 변경)이 뭔가를하려는 생각 :

select 
    iu.UserName as UserNameWhoDisplayed, 
    pu.UserName as UserNameWhosePost, 
    sum(i.Count) as [Count] 
from ItemDisplayCounts as i 
    inner join aspnet_Users as iu on iu.userid = i.whodisplayedid 
    inner join posts as p on p.postid = i.postid 
    inner join aspnet_Users as pu on pu.userid = p.whopostedid 
group by 
    iu.UserName, 
    pu.UserName 
+0

실제로 sum() 함수가 필요하지 않습니다. 줄 단위로 그룹을 제거하고 select 문에서 i.Count 만 사용했습니다. 나는 이것이 같은 UserNameWhoDisplayed 몇 번 반복한다는 점을 제외하면 동일 할 것입니다. 감사! – renakre

1

내가 당신을 이해하고있는 경우가 올바르게 쿼리의 모든 계산을 수행 할 필요가 없습니다, 당신은이 있기 때문에 ITEMDISPLAYCOuNTS 테이블의 count 필드 그래서 나는 이것이 당신에게 효과가 있다고 생각합니다 :

SELECT U2.username AS UserNameWhoDisplayed, 
     U1.username AS UserNameWhosePost, 
     ID.[Count] 
FROM ((POSTS AS P 
     INNER JOIN ASPNET_USERS AS U1 ON P.whopostedid = U1.userid) 
     INNER JOIN ITEMDISPLAYCOuNTS AS ID ON P.postid = ID.postid) 
     INNER JOIN ASPNET_USERS AS U2 ON ID.whodisplayedid = U2.userid