如何在独特的数组Mysql中获取记录

时间:2016-04-06 11:34:47

标签: mysql sql

我有一张桌子:

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

我想得到唯一的user_id有marker_id =(1,2)。没有得到user_id的是marker_id =(1,2,3)。如何获取user_id = 1并且不包括user_id = 2.

2 个答案:

答案 0 :(得分:1)

select distinct user_id 
from table_name 
where marker_id in (1,2)

答案 1 :(得分:1)

一种方法使用group by

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_id = 1> 0的首次测试表明至少有一个。第二个类似的marker_id = 2测试。第三个说没有其他标记ID。

我将这种类型的查询称为“set-within-sets”子查询(您正在为每个用户查找标记ID)。我发现group by / having是解决这些问题的灵活方式。