在 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;
试试这个..它的工作
我正在从行
的大结果中执行这个SQLSELECT 用户 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;
试试这个..它的工作