关于mysql:在GROUP_CONCAT内搜索

Search within GROUP_CONCAT

我正在根据行的大结果执行此 SQL

SELECT 用户 ID,group_concat(locationid)
来自 user_location
按用户标识分组
有 group_concat(locationid) = 10

1
2
3
4
5
6
7
8
9
10
userid  locationid
---------  ----------
894801  10,10,10,10,10,10,10,10,10,10,10,10
898356  10,10,11,10
900424  10,10,13,12,12,12,12
902123  10
904910  10,10
907922  10,10,10
912587  10,12,12
930319  10

现在,我只想要值 = 10 且没有其他值的那些 locationid 行

期望的输出:

1
2
3
4
5
6
7
userid  locationid
---------  ----------
894801  10,10,10,10,10,10,10,10,10,10,10,10
902123  10
904910  10,10
907922  10,10,10
930319  10

我探索并找到了 find_in_set() 但在这里没有用


不要使用 group_concat() 的结果。只需使用一个简单的 having 子句:

1
2
3
4
SELECT userid, group_concat(locationid)
FROM user_location
GROUP BY userid
HAVING SUM(locationid = 10) = COUNT(*)

SUM() 计算等于 10 的值的数量。 = COUNT(*) 简单地说都是 10。

您也可以通过确保没有任何值不是 10 来做到这一点:

1
HAVING SUM(locationid <> 10) = 0


1
2
SELECT * FROM user_location WHERE userid not in (select userid from user_location where locationid<>10)
group by userid having locationid=10;

试试这个..它工作正常