【问题标题】:sql select query among 3 tablessql在3个表中选择查询
【发布时间】:2013-10-11 20:08:42
【问题描述】:

我有三张桌子:

ITEMDISPLAYCOuNTS *此表存储谁显示了哪些帖子以及显示了多少次

postid、count、whodisplayedid

POSTS *此表存储谁发布了什么?

postid,谁发帖ID

ASPNET_USERS

用户名,用户名

最后我想要的是谁显示了谁的帖子,显示了多少次,使用用户名,而不是用户 ID:

输出

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

谁能提出更正的建议?

【问题讨论】:

  • “无法正常运行”是什么意思?您使用什么 RDBMS?

标签: sql select join multiple-tables


【解决方案1】:

我认为您想要这样的东西(将您的连接更改为正确的 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

【讨论】:

  • 我其实不需要 sum() 函数。我逐行删除了 group,并且在 select 语句中只使用了 i.Count 。我想这将是相同的,只是它会重复相同的 UserNameWhoDisplayed 几次。谢谢!
【解决方案2】:

如果我对您的理解正确,您不需要在查询中执行任何数学运算,因为您在 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

【讨论】:

    猜你喜欢
    • 2021-08-16
    • 1970-01-01
    • 1970-01-01
    • 2011-07-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-07
    • 1970-01-01
    相关资源
    最近更新 更多