Вы можете использовать следующее решение, используя 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