在 GROUP_CONCAT 内搜索

Search within GROUP_CONCAT

我正在从行

的大结果中执行这个SQL

SELECT 用户 ID,group_concat(位置 ID) 来自 user_location 按用户 ID 分组 group_concat(locationid) = 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 行

期望输出:

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 子句:

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

SUM()计算等于10的值的个数。 = COUNT(*) 只是说所有都是 10。

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

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

试试这个..它的工作