如何在唯一数组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)。请在问题中添加您的预期结果