Sql 如何编写连接三个表的嵌套查询?
我正在创建一个类似社交网络的网站。我有三张桌子。我正在查找每个用户及其好友总数和被阻止的好友数Sql 如何编写连接三个表的嵌套查询?,sql,sql-server,sql-server-2008,Sql,Sql Server,Sql Server 2008,我正在创建一个类似社交网络的网站。我有三张桌子。我正在查找每个用户及其好友总数和被阻止的好友数 1. tbl_Registrations | Id | FirstName | ************************* 1 User1 2 User2 3 User3 4 User4 5 User5
1. tbl_Registrations
| Id | FirstName |
*************************
1 User1
2 User2
3 User3
4 User4
5 User5
6 User6
7 User7
8 User8
2.tbl_Friends
| Id | SenderId | ReciverId | Status |
1 1 2 Accept
2 3 1 Accept
3 4 1 Accept
4 2 3 Accept
5 3 8 Accept
6 4 2 Accept
7 4 3 Accept
8 8 4 Accept
3. tbl_Status
| Id | UserId | Status |
1 1 Blocked
2 3 Blocked
3 4 Allowed
4 2 Blocked
5 6 Blocked
6 5 Allowed
7 8 Blocked
8 7 Allowed
我的问题是
SELECT tbl_Registrations.FirstName, COUNT(*) AS TotalFriends
FROM tbl_Friends INNER JOIN tbl_Registrations ON tbl_Friends.SenderId = tbl_Registrations.Id
OR tbl_Friends.ReciverId = tbl_Registrations.Id
WHERE (tbl_Friends.Status = 'Accept')
GROUP BY tbl_Registrations.FirstName
使用我的查询,我将只得到姓名和好友总数。如何在同一查询中包含被阻止好友的查找计数
我的预期产出是
| FirstName | TotalFriendsCount | BlockedFriendsCount |
试试这个
SELECT tbl_Registrations.FirstName,
COUNT(*) AS TotalFriends,
( SELECT COUNT(*) FROM tbl_Status
WHERE [Status] = 'Blocked'
AND (UserId = tbl_Friends.SenderId
OR UserId = tbl_Friends.ReciverId)
AND UserId <> tbl_Registrations.id ) BlockedFriendsCount
FROM tbl_Friends
INNER JOIN tbl_Registrations ON tbl_Friends.SenderId = tbl_Registrations.Id
OR tbl_Friends.ReciverId = tbl_Registrations.Id
WHERE (tbl_Friends.Status = 'Accept')
GROUP BY tbl_Registrations.FirstName
你的tbl_状态对我来说没有意义,你怎么知道用户ID 1被阻止了?他被谁阻止了?被管理员阻止了。我在做行政部分。在管理端,我列出了用户列表和他们的好友数以及被阻止的好友数@Veljko89,所以你想说tbl_friends.Status可以被“阻止”吗?我只是不知道哪一列显示的是BlockedFriends。BL_Friends.Status表示好友请求是否被接受,tbl_Status.Status表示用户是否被阻止@Veljko89不标记未涉及的产品。。。您在这里使用的是MySQL还是MS SQL Server?我收到错误消息:列tbl_Friends.SenderId在选择列表中无效,因为它未包含在聚合函数或group by子句中。列tbl_Friends.ReciverId在选择列表中无效,因为它未包含在聚合函数或group by子句中。列tbl_Registrations.Id在选择列表中无效,因为它既不包含在聚合函数中,也不包含在group by子句中。@Abdul Rasheed