#mysql #subquery
#mysql #подзапрос
Вопрос:
У меня есть таблица с данными, похожими на приведенные ниже
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. Не только A и не только B
Для приведенного выше, он должен возвращать мне только
userId - 5001
Кто-нибудь может помочь в этом?
Ответ №1:
Вы можете использовать следующее решение, используя 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'
);
Комментарии:
1. Идеальный… Большое спасибо