MySQL查询以选择仅选择一个类别的用户

时间:2019-03-21 09:38:28

标签: mysql subquery

我有一张桌子,数据类似于下面

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

有人可以帮忙吗?

1 个答案:

答案 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'
);

demo on dbfiddle.uk