SQL selecting multiple record by different variable

51 Views Asked by At

Ok, so I have a table Assignment:

[UserId]
[GroupId]
[UpdatedBy]
[UpdatedAt]

Also, I have a function for returning users from a specific group:

select UserId 
from dbo.GetGroupUsers() ggu 
where ggu.GroupId = ?

In Assignment, I want to check all groups that our user is listed and then I want to select ALL users from these groups, without duplicate.

How can I achieve this?

Edit: Sample output form selecting groupid = 4 sample_output

for example user "test1" belong to other group where id=2 at the same time and i want selected all users from for example group 2 and 4 (cause in this example test1 said so) without records duplicate

3

There are 3 best solutions below

2
CSY On

All groups from one UserId (say UserId 10):

select GroupId from Assignment where UserId = 10

Select all users from those groups (without duplicate):

select distinct UserId 
from dbo.GetGroupUsers() ggu 
where ggu.GroupId in (select GroupId from Assignment where UserId = 10)

I hope this is what you wanted.

0
sticky bit On

An inner self join should get you the IDs of the users you're looking for. Join the result with your user table (which you didn't post) to possibly get other information about these users.

SELECT DISTINCT
       a2.userid
       FROM assignment a1
            INNER JOIN assignment a2
                       ON a2.groupid = a1.groupid
       WHERE a1.userid = ?;

(Replace the ? with the ID of the user, you want to start with.)

0
Saravana Kannadasan On

Assuming your input is a user id:test1 and assuming that you are just looking at one table (Assignment)

DECLARE @UserId INT = 2
;WITH GROUPS AS
(
SELECT DISTINCT GroupId FROM Assignment WHERE UserId = @UserId 
)
SELECT distinct assgn.UserName, gps.GroupId FROM Assignment assgn
INNER JOIN
GROUPS gps ON
assgn.GroupId = gps.GroupId

Please let me know if this helps