SQL ВЫБИРАЕТ строки на основе IFs и комбинации

#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