SQL-запрос, чтобы показать, если два пользователя в одной группе - PullRequest
1 голос
/ 23 октября 2009

У меня есть база данных с 3 таблицами: пользователи, группы и участники группы.

users:
id int
username varchar(50)

groups:
id int
name varchar(50)

groupmembers:
id int
groupid int
user int

Учитывая два идентификатора пользователя, как я могу использовать один запрос, чтобы определить, разделяют ли они членство в какой-либо группе (не какой-то конкретной, а какой-либо группе). Мне бы хотелось, чтобы запрос возвращал значение NULL, если они не имеют общего членства, и значение NULL, если они имеют общее членство.

Ответы [ 2 ]

1 голос
/ 23 октября 2009

С другой стороны

select count(*) from groupmembers 
  where user=@user1 
    and groupid in 
      (select groupid from groupmembers where user=@user2)

Это возвратит общее количество групп. Вы можете проверить счет, заменив счет *) следующим:

IF(count(*)>0,1,Null)
0 голосов
/ 23 октября 2009

Вот SQL, который будет возвращать группы, членами которых являются оба пользователя

SELECT g1.id
FROM groupmembers g1 join groupmembers g2 on g1.id = g2.id
WHERE g1.user = @user1
AND g2.user = @user2;

Если вы хотите просто вернуть '1' или 'Null', вы можете обернуть это следующим образом

With groupcount as (
    SELECT count(*) gc
    FROM groupmembers g1 join groupmembers g2 on g1.id = g2.id
    WHERE g1.user = @user1
    AND g2.user = @user2)
SELECT Case When gc = 0 Then Null Else 1 End as SharedGroups
FROM groupcount;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...