访问跨表计数的SQL语法

时间:2013-09-26 22:47:20

标签: sql select

我有一个简单的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是多对多的(就我所看到的字段而言),我无法使逻辑工作。

感谢任何和所有帮助。

1 个答案:

答案 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