#sql
#sql
Вопрос:
У меня есть следующая таблица в SQL:
| ID | USER_FK | ROLE_FK |
|----|---------|---------|
| 1 | 1 | 1 |
| 2 | 1 | 2 |
| 3 | 2 | 2 |
| 4 | 2 | 2 |
| 5 | 3 | 2 |
И из него мне нужно выбрать USER_FK
s, в котором есть одна или несколько строк ROLE_FK = 2
.
Однако я не хочу выбирать тот USER_FK
, у которого есть хотя бы один ROLE_FK
, кроме just 2
.
Итак, выберите любой USER_FK
, который имеет ТОЛЬКО ROLE_FK = 2
одну или несколько строк. В приведенном выше примере я хотел бы, чтобы USER_FK = 2
и USER_FK = 3
были включены в результаты, но нет USER_FK = 1
(поскольку у него есть один ROLE_FK = 1
случай). Как мне это сделать?
Ответ №1:
Вы можете использовать group by
и having
:
select user_fk
from t
group by user_fk
having min(role_fk) = max(role_fk) and min(role_fk) = 2;
Если минимальное значение равно максимальному, то все роли одинаковы.
Комментарии:
1. Спасибо! Именно то, что мне было нужно! И, чтобы продолжить, скажите, что я хотел бы то же самое для другого ROLE_FK в тех же результатах. Я бы хотел, чтобы все пользователи, у которых есть только 2 И / ИЛИ 5 в role_fk. Могу ли я просто добавить ИЛИ иметь min (role_fk) = max (role_fk) и min (role_fk) = 5