#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
);