0

単純な SQL 構文の質問かもしれませんが、何週間も頭を悩ませてきましたが、抽象的すぎて Google で正しい検索を見つけるのに苦労しています。

ユーザーと予約の 3 つのテーブルがあるとします。

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 には 1 つの共同ミーティング (この場合は「2」) しかなく、ユーザー 2 には 2 つの共同ミーティング (1 と 3) がありました。

私の説明が非常に明確でない場合は申し訳ありませんが、探している構文に実際には影響しない他の交差するテーブルやフィールドから不必要な複雑さを取り除こうとしています. 私の最初の考えは「Group By」を使用することでしたが、Bookings は多対多であるため (私が見ているフィールドに関して)、ロジックを機能させることができません。

どんな助けでも大歓迎です。

4

1 に答える 1

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
于 2013-09-26T23:56:14.427 に答える