0
とカウント:どのようにグループのためにSQLクエリを最適化する私は3つのテーブル持っている優先順位列
User -- contains users
Group -- contains a set of groups that users can be members of
Membership -- Contains PKs from User and Group to indicate that User is a member of group
をPK類は、それぞれユーザーID、グループID、およびMembershipIdであり、会員は、他の2つのテーブルにFKSを持っています。
これはかなり標準的なものです。ユーザーは複数のグループのメンバーになり、グループにはレベル(1,2,3,4)があります。ユーザーの現在のグループは、最高レベルのメンバーです。
今、各グループのメンバー数を取得したいと思います。私は優先順位の高いグループ内の別のメンバーシップがあるかどうかを確認するために探していますので、各ユーザーの
SELECT Count(*) FROM Membership
FROM Membership M1
INNER JOIN Group G1 ON M1.GroupId = G1.GroupId
INNER JOIN User ON User.UserId = M1.UserId
WHERE
M1.GroupId = @groupId
AND NOT EXISTS (
SELECT * FROM Membership M2
INNER JOIN Group G2 ON M2.GroupId = G2.GroupId
WHERE M2.UserId = M1.UserId
AND G1.Priority < G2.Priority)
:現時点では私はこのような何かを持っています。これは明らかにかなり恐ろしいです、特に行がたくさんあるときには、私はそれを改善する方法を少し失っています。私はちょうど1つの選択すべてのグループのカウントを取得するのではなくなるよう
理想的には、私はそれを変換したいと思います(上記のように。)
任意のアイデアをどのようにより効率的にこれを行うには?