Mysql SQL注释分组

Mysql SQL注释分组,mysql,sql,Mysql,Sql,我有两张MySQL表格 表1:ID的列表 -只有一列ID的列表 表2:工作组 -团体头衔 -成员** 现在,成员字段基本上是一个注释字段,其中列出了属于该组的所有ID。例如,一个完整的成员字段如下所示: "ID003|ID004|ID005|ID006|ID007|ID008|... Etc." 在该字段中最多可以列出500多个 我想做的是运行一个查询,找出哪个ID只出现在三个或更少的组中 我一直在开玩笑,但老实说,我完全迷路了。有什么想法吗?编辑;我第一次误解了这个问题,所以我要改变我的答案

我有两张MySQL表格

表1:ID的列表

-只有一列ID的列表

表2:工作组

-团体头衔

-成员**

现在,成员字段基本上是一个注释字段,其中列出了属于该组的所有ID。例如,一个完整的成员字段如下所示:

"ID003|ID004|ID005|ID006|ID007|ID008|... Etc."
在该字段中最多可以列出500多个

我想做的是运行一个查询,找出哪个ID只出现在三个或更少的组中


我一直在开玩笑,但老实说,我完全迷路了。有什么想法吗?

编辑;我第一次误解了这个问题,所以我要改变我的答案

SELECT l.id
FROM List_of_ids AS l
JOIN Groups AS g ON CONCAT('|', g.members, '|') LIKE CONCAT('%|', l.id, '|%')
GROUP BY l.id
HAVING COUNT(*) <= 3 
有了这个表,使用连接索引将更加高效:

SELECT l.id
FROM List_of_ids AS l
JOIN GroupsIds AS gi ON gi.memberid = l.id
GROUP BY l.id
HAVING COUNT(*) <= 3 

@Mihai讽刺地指出,您有一个基本的DB设计问题。你真的需要规范化这些数据。您是否愿意接受关于更改DB模式的建议,因为如果没有这些建议,我建议您尝试用您选择的编程语言来解决这个问题。您能详细说明这有助于获取仅在三个或更少组中出现的ID吗?@FilipeSilva带分隔符的字符串与不带分隔符的字符串之间的长度差显示ID的数量。分隔符=组数,分隔符为1个字符。此查询解决了一个稍有不同的问题,它显示成员数为3或更少的组,但OP需要查找成员数为3或更少的组groups@Mihai我懂了。这确实是一个聪明的技巧,可以知道里面有多少ID,但我不确定这是否解决了OP的问题。@FilipeSilva,你是对的,我误解了OP的问题,所以我写了一个新的答案。
SELECT l.id
FROM List_of_ids AS l
JOIN GroupsIds AS gi ON gi.memberid = l.id
GROUP BY l.id
HAVING COUNT(*) <= 3 
select * from
(
    select ID,
    (
        select count(*)
        From Groups
        where LOCATE(concat('ID', a.id, '|'), concat(Members, '|'))>0
    ) as groupcount
    from ListIDTable as a
) as q
where groupcount <= 3