我有一个简单的SQL语法问题,但我已经对它进行了数周的讨论,并且它已经足够抽象,我无法在Google中搜索正确的搜索。
我们假设我有三个表:用户和预订:
Users:
UserID Name
1 Adam
2 Bob
3 Charlie
Bookings:
BookingID UserID MeetingID
1 1 1
2 2 1
3 2 2
4 3 2
我想要创建的查询将告诉我每个用户与其共享会议ID的其他用户数量。在我的例子中:
Output:
UserID Co-Meeters
1 1
2 2
3 1
在示例中,用户1和3只有一个联合会(在这种情况下为“2”),而用户2有两个共同会议(1和3)。
如果我的描述不是很清楚,我很抱歉,但是我试图从其他相交的表和字段中删除不必要的并发症,这些并不会影响我正在寻找的语法。我最初的想法是使用“Group By”,但由于Bookings是多对多的(就我所看到的字段而言),我无法使逻辑工作。
感谢任何和所有帮助。
答案 0 :(得分:0)
我认为这应该可以解决问题:
select u.userid, iif(isnull(x.others), 0, x.others) as [Co-Meeters]
from users u
left join bookings b on u.userid = b.userid
left join (
select meetingid, count(*) as others from bookings where userid <> u.userid
) x on b.meetingid = x.meetingid
order by 1