Question

Using SQL Server 2012 Express

I have two tables, groupsmembers1 and groupsmembers2.

Both tables contain four columns: groupname, membername, memberaddress, ID.

The tables are populated with group and member data from AD (1) and Domino (2).

The desire is to compare the groupname(s) and memberaddress(es) (between the two tables) to identify where a group and/or groupmember does/does not exist in either directory.

Both tables look similar to below:

ID      GroupName  MemberName   MemberAddress  
4033    group1     membername1  memberaddress1
4034    group1     membername2  memberaddress2
4035    group1     membername3  memberaddress3
4036    group1     membername4  memberaddress4
4037    group2     membername22 memberaddress22
4038    group2     membername23 memberaddress23
4039    group2     membername24 memberaddress24
4040    group2     membername25 memberaddress25  

My difficulty is building a query that will show me every group, from both tables, with each member even if one table does not have that exact entry.

I have tried this (and variations) from tons of posts I have read related to combining table data, joining tables and the like.

select a.GroupName, a.memberaddress, d.groupname, d.memberaddress
from [groupsmembers1] a
join [groupsmember2] d on a.groupname = d.GroupName
where a.groupname like '%somegroupname%'

The query above gives me 49 rows of data like this (when table groupsmembers1 has 9 rows and table groupsmembers2 only has 7 rows for %somegroupname%:

groupname     memberaddress     groupname       memberaddress
somegroupname memberaddress1    somegroupname   memberaddress1
somegroupname memberaddress2    somegroupname   memberaddress1
somegroupname memberaddress3    somegroupname   memberaddress1
somegroupname memberaddress4    somegroupname   memberaddress1
somegroupname memberaddress5    somegroupname   memberaddress1
somegroupname memberaddress6    somegroupname   memberaddress1
somegroupname memberaddress7    somegroupname   memberaddress1
somegroupname memberaddress1    somegroupname   memberaddress2
somegroupname memberaddress2    somegroupname   memberaddress2
somegroupname memberaddress3    somegroupname   memberaddress2
somegroupname memberaddress4    somegroupname   memberaddress2
somegroupname memberaddress5    somegroupname   memberaddress2
somegroupname memberaddress6    somegroupname   memberaddress2
somegroupname memberaddress7    somegroupname   memberaddress2

I am new at this and realize my table design is probably part of my issue. Can anyone suggest a query that could help me?

Desired results:

groupname1    memberaddress1    groupname2      memberaddress2
somegroupname memberaddress1    somegroupname   memberaddress1
somegroupname memberaddress2    somegroupname   memberaddress2
somegroupname memberaddress3    somegroupname   memberaddress3
somegroupname memberaddress4    somegroupname   memberaddress4
somegroupname memberaddress5    somegroupname   memberaddress5
somegroupname memberaddress6    somegroupname   memberaddress6
somegroupname memberaddress7    somegroupname   memberaddress7
somegroupname memberaddress8    null            null
somegroupname memberaddress9    null            null  

Thank you for your time and any assistance you can provide.

Was it helpful?

Solution

Your table structure does have some issues. Check out third normal form.

You really should have separate tables for Member, Address, and Group. Along with the appropriate join tables to relate all of those together.

Having said that, I think this will help:

select a.GroupName, a.memberaddress, d.groupname, d.memberaddress
from [groupsmembers1] a full outer join [groupsmember2] d
    on a.GroupName = d.GroupName
        and a.MemberName = d.MemberName
where a.groupname like '%somegroupname%'
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top