Как я могу получить запись с обязательным совпадением минимальных заданных идентификаторов с SQL IN?

#mysql #sql #join #where-clause #sql-in

Вопрос:

У меня есть столы:

Пользователи:

 id | name
1  | first name
2  | second name
3  | third name
4  | fourth name
 

Проекты:

 id | name
1  | first
2  | second
 

Приглашенные на проект:

 id | userId | projectId
1  | 1      |     1
2  | 2      |     1
3  | 2      |     2
4  | 3      |     1
 

Я хочу такую запись, как:
проект, который должен иметь как минимум идентификатор пользователя получателя с 1, так и идентификатор пользователя с 2

Я пытался:

выберите идентификатор проекта из приглашенных участников, где идентификатор пользователя В (1, 2);

но он возвращает идентификатор проекта 1 и 2, потому что я пользователь, но, как я уже упоминал, мне нужен только идентификатор проекта 1

Может ли кто-нибудь помочь мне в этом

Комментарии:

1. select projectId from projectInvitees where userId IN (1, 2) GROUP BY projectId ORDER BY COUNT(*) LIMIT 1; ?

2. Что такое asignee?

Ответ №1:

Этот вариант может вам помочь. Для изменения количества пользователей необходимо просто изменить параметр в HAVING инструкции.

     SELECT projectid
    FROM projectinvitees
    WHERE userId IN (1, 2)
    GROUP BY projectid 
    HAVING count (*) >= 2
 

Ответ №2:

вы можете использовать такой запрос:

 SELECT distinct projectId 
FROM projectInvitees
WHERE userId IN (1, 2)
GROUP BY projectId
HAVING count(*)  = 2;
 

образец

 MariaDB [Kazoku]> SELECT * from projectInvitees;
 ---- -------- ----------- 
| id | userId | projectId |
 ---- -------- ----------- 
|  1 |      1 |         1 |
|  2 |      2 |         1 |
|  3 |      2 |         2 |
|  4 |      3 |         1 |
 ---- -------- ----------- 
4 rows in set (0.02 sec)

MariaDB [Kazoku]> select distinct projectId 
    -> from projectInvitees
    -> WHERE userId IN (1, 2)
    -> GROUP BY projectId
    -> HAVING count(*)  = 2;
 ----------- 
| projectId |
 ----------- 
|         1 |
 ----------- 
1 row in set (0.00 sec)

MariaDB [Kazoku]> 
 

Ответ №3:

Это то, что тебе нужно?

 SELECT
    min(projectid) projectid
FROM
    projectinvitees
WHERE
    userid IN (
        1,
        2
    );