如何在唯一数组Mysql中获取记录

如何在唯一数组Mysql中获取记录,mysql,sql,Mysql,Sql,我有一张桌子: ---------------------- | user_id | marker_id| ---------------------- | 1 | 1 | -------- | 1 |2 | -------- | 2 |1 | -------- | 2 |2 | -------- | 2 |3 | -------- | 3 |1 | -------- 我希望获得唯一的用户\u id具有标记\u id=(1,2)。不获取用户\u id具有标记\u id=(1,2,3)。如何获取

我有一张桌子:

----------------------
| user_id | marker_id|
----------------------
| 1 | 1 |
--------
| 1 |2 |
--------
| 2 |1 |
--------
| 2 |2 |
--------
| 2 |3 |
--------
| 3 |1 |
--------

我希望获得唯一的用户\u id具有标记\u id=(1,2)。不获取用户\u id具有标记\u id=(1,2,3)。如何获取用户id=1而不包括用户id=2。

一种方法使用
分组方式

select distinct user_id 
from table_name 
where marker_id in (1,2)
select user_id
from t
group by user_id
having sum(marker_id = 1) > 0 and
       sum(marker_id = 2) > 0 and
       sum(marker_id not in (1, 2)) = 0;
having
子句中的每个条件都测试一个值。对
marker\u id=1
>0
的第一次测试表明至少有一个标记。第二个类似地测试
标记_id=2
。第三个表示没有其他标记ID


我将这种类型的查询称为“集合中的集合”子查询(您正在为每个用户查找标记ID)。我发现
分组方式
/
拥有
是解决这些问题的一种灵活方式。

一种方法使用
分组方式

select user_id
from t
group by user_id
having sum(marker_id = 1) > 0 and
       sum(marker_id = 2) > 0 and
       sum(marker_id not in (1, 2)) = 0;
having
子句中的每个条件都测试一个值。对
marker\u id=1
>0
的第一次测试表明至少有一个标记。第二个类似地测试
标记_id=2
。第三个表示没有其他标记ID


我将这种类型的查询称为“集合中的集合”子查询(您正在为每个用户查找标记ID)。我发现
分组方式
/
拥有
是解决这些查询的一种灵活方式。

但结果包括user\u id=2。我只想得到(1,2)中的marker_id,总marker_id=2。这意味着用户_id正好具有标记_id=(1,2)而不是更多(1,2,3,4)。请在问题中添加您的预期结果,但结果包括用户_id=2。我只想得到(1,2)中的marker_id,总marker_id=2。这意味着用户_id正好有标记_id=(1,2)而不是更多(1,2,3,4)。请在问题中添加您的预期结果