Reputation: 47
I have a SQL Server
database with three tables:
GROUPS
GroupID GroupTitle
1 Group 1
2 Group 2
3 Group 3
4 Group 4
MEMBERS
MemberID MemberName
19 Jon
20 Marie
21 Andrew
MEMBER GROUPS
MembersGroupID GroupID MemberID
221 1 20
231 1 21
I made a left join
and got the following result:
GroupID GroupTitle MemberID IsPartOfGroup MemberName
1 Group 1 20 Yes Marie
1 Group 1 21 Yes Andrew
2 Group 2 NULL No NULL
3 Group 3 NULL No NULL
4 Group 4 NULL No NULL
This is my join:
select g.GroupID
,g.GroupTitle
,mg.MemberID
,IsPartOfGroup = case when mg.MembersGroupID is null then 'No' else 'Yes' end
from groups g
left join membergroups mg on g.GroupID = mg.GroupID
left join members m on m.memberid = mg.MemberID
But what I want is the following result:
GroupID GroupTitle MemberID IsPartOfGroup MemberName
1 Group 1 19 No Jon
2 Group 2 19 No Jon
3 Group 3 19 No Jon
4 Group 4 19 No Jon
1 Group 1 20 Yes Marie
2 Group 2 20 No Marie
3 Group 3 20 No Marie
4 Group 4 20 No Marie
1 Group 1 21 Yes Andrew
2 Group 2 21 No Andrew
3 Group 3 21 No Andrew
4 Group 4 21 No Andrew
In other words, I want to get all members and the groups they are part of and also the ones they are not part of.
Is that possible?
Upvotes: 2
Views: 34
Reputation: 484
select g.GroupID
,g.GroupTitle
,mg.MemberID
,IsPartOfGroup = case when mg.MembersGroupID is null then 'No' else 'Yes' end
from groups cross join membergroups
left join members m on m.memberid = mg.MemberID
Upvotes: 0
Reputation: 35780
You need first to cross join
and the left join
on MemberGroups
table. Try this:
select g.GroupID,
g.GroupTitle,
m.MemberID,
m.MemberName,
case when mg.MembersGroupID is null then 'No' else 'Yes' end as IsPartOfGroup
from GROUPS g
cross join MEMBERS m
left join MEMBER_GROUPS mg on g.GroupID = mg.GroupID and m.MemberID = mg.MemberID
Upvotes: 1