我有一张桌子,数据类似于下面
id UserId Category
1 5001 A
2 5001 B
3 5002 A
4 5003 B
5 5004 A
6 5001 A
1)我们如何查询可以获取仅注册A类用户的表。用户不应注册为B或任何其他类别。 对于上面的数据,它应该只返回
3 5002 A
2)我们如何编写查询以获取同时注册了A和B类别的用户。不孤单A和不孤单B 对于上述情况,它应该只返回
userId - 5001
有人可以帮忙吗?
答案 0 :(得分: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'
);