gpt4 book ai didi

mysql - SQL 注释分组

转载 作者:行者123 更新时间:2023-11-29 01:21:50 24 4
gpt4 key购买 nike

我在 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

这必然会执行得很差,因为它强制对两个表进行表扫描。如果您有 500 个 ID 和 500 个组,它必须运行 250000 次比较。

您真的应该考虑存储符号分隔列表是否是执行此操作的正确方法。请参阅我对 Is storing a delimited list in a database column really that bad? 的回答

设计这种关系的正确方法是创建第三个表,将 id 映射到组:

CREATE TABLE GroupsIds (
memberid INT,
groupid INT,
PRIMARY KEY (memberid, groupid)
);

对于这个表,使用索引进行连接会更有效率:

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

关于mysql - SQL 注释分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19504937/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com