Поиск по строкам для идентификаторов пользователя, если все значения указаны в списке столбцов - PullRequest
1 голос
/ 27 апреля 2020

У меня есть таблица с записями квалификаций, по которым мне нужно искать, показывая только user_ids, которые содержат все коды курсов AB, CB и DE. Я пробовал группировать, считать (*) и иметь, но, как бы я ни расставлял вещи, я все равно не получаю желаемого результата.

record_id      user_id     course_code    
------------------------------------------------
1              1000        AB
2              1000        CB
3              1000        DE
4              1001        AB
5              1002        AB
6              1003        AB
7              1004        AB
8              1005        AB
9              1005        CB
10             1005        DE

Выполнение запроса, которого я пытаюсь достичь, должно возвращать только user_id: 1000 и 1005.

Чтобы добавить дополнительную сложность, этот список квалификаций для поиска будет динамически генерироваться сценарием PHP на основе некоторого пользовательского ввода. Так что в некоторых случаях может включать 10 значений course_code, а в других только 1.

1 Ответ

0 голосов
/ 27 апреля 2020

Вы можете использовать агрегацию и фильтровать с помощью предложения having:

select user_id
from mytable 
where course_code in ('AB', 'CB', 'DE')
group by user_id
having count(*) = 3

Это предполагает, что кортежи (user_id, course_code) уникальны для всех таблиц, в противном случае вам придется изменить предложение having на:

having count(distinct course_code) = 3

Вы можете легко изменить предложения where и having, чтобы обрабатывать больше course_code s.

...