MySQL Query для выбора пользователей, которые выбрали только одну категорию - PullRequest
1 голос
/ 21 марта 2019

У меня есть таблица с данными, аналогичными приведенным ниже

id  UserId  Category
1    5001       A
2    5001       B
3    5002       A
4    5003       B
5    5004       A
6    5001       A

1) Как мы можем запросить таблицу, в которой можно найти пользователей, которые зарегистрировались только для категории А. Пользователь не должен быть зарегистрирован для B или любой другой категории. Для данных выше, он должен вернуть мне только

3    5002       A

2) Как мы пишем запрос, который может выбрать пользователей, которые зарегистрировались как для категории A, так и для категории B. Не один А и не один Б За вышесказанное мне должно возвращаться только

userId - 5001

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

1 Ответ

1 голос
/ 21 марта 2019

Вы можете использовать следующее решение, используя IN:

SELECT DISTINCT UserID, Category
FROM table_name t
WHERE Category = 'A' AND UserID NOT IN (
    SELECT UserID 
    FROM table_name
    WHERE Category <> t.Category
);

Другое решение с использованием EXISTS:

SELECT DISTINCT UserID, Category
FROM table_name t
WHERE Category = 'A' AND NOT EXISTS (
    SELECT 1 
    FROM table_name 
    WHERE UserID = t.UserID AND Category <> t.Category
);

Чтобы получить второй результат, вы можете использоватьследующее решение с использованием INNER JOIN:

SELECT DISTINCT t.UserId
FROM table_name t INNER JOIN (
    SELECT UserId 
    FROM table_name
    WHERE Category = 'B'
) b ON t.UserId = b.UserId
WHERE t.Category = 'A'

Другое решение с использованием EXISTS:

SELECT DISTINCT UserID
FROM table_name t
WHERE Category = 'A' AND EXISTS (
    SELECT 1 
    FROM table_name
    WHERE UserID = t.UserID AND Category = 'B'
);

демонстрация на dbfiddle.uk

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...