SQL выбрать запрос среди 3 таблиц

У меня есть три таблицы:

ITEMDISPLAYCOUNTS * в этой таблице хранится информация о том, кто отображал какие сообщения и сколько раз

postid, подсчет, ктоотображалид

ПУБЛИКИ *эта таблица хранит информацию о том, кто что опубликовал?

постид, ктоопубликовалид

ASPNET_USERS

идентификатор пользователя, имя пользователя

В конце я хочу, чтобы кто чей пост отображал и сколько раз, с именами пользователей, а не с идентификаторами пользователей:

ВЫХОД

UserNameWhoDisplayed, UserNameWhosePost, Счетчик

Я написал следующий код, но он не работает должным образом.

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

Может кто подскажет какие исправления?


person renakre    schedule 11.10.2013    source источник
comment
что вы имеете в виду под неправильной работой? Какую СУБД вы используете?   -  person Roman Pekar    schedule 12.10.2013


Ответы (2)


Я думаю, вы хотите что-то вроде этого (изменили ваши соединения на правильные 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
person Roman Pekar    schedule 11.10.2013
comment
Мне на самом деле не нужна функция sum(). Я удалил группировку по строкам и использовал только i.Count в операторе выбора. Я предполагаю, что это будет то же самое, за исключением того, что одно и то же UserNameWhoDisplayed будет повторяться пару раз. Спасибо! - person renakre; 12.10.2013

Если я вас правильно понимаю, вам не нужно выполнять какие-либо математические операции в запросе, так как у вас есть поле count в таблице ITEMDISPLAYCOuNTS. Итак, я верю, что это сработает для вас:

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
person Linger    schedule 11.10.2013