mysql - 在 SQL 的一对多关系中查找重复项

标签 mysql sql performance duplicates

问题

我有 2 个表:

Table tTag
idTag int
otherColumns

Table tTagWord
idTagWord int
idTag int
idWord int
position int

例如:

enter image description here

所以每个idTag都会有多个idTagWord(未知数),位置也很重要。 我试图找到性能最佳的方法来查找重复项。

对于 2 个不同的 idTag,重复将具有相同顺序(位置)的相同 idWords。

我尝试过的

SELECT GROUP_CONCAT(DISTINCT tab.idTag SEPARATOR ',') INTO @idTagSet
FROM (  SELECT idTag,GROUP_CONCAT(idWord order by position ASC SEPARATOR ' ') AS Tag
        FROM tTagWord
        GROUP BY idTag) AS tab
INNER JOIN (SELECT idTag,GROUP_CONCAT(idWord order by position ASC SEPARATOR ' ') AS Tag
            FROM tTagWord
            GROUP BY idTag) AS tab2 ON tab.Tag = tab2.Tag
WHERE tab.idTag <> tab2.idTag;

前面的查询返回了一组重复的 idTag,所以它有效。但是性能很糟糕。有了 150 000 个 idTag,这已经需要几分钟时间,表格很快就会有数百万个 idTag。

我也试过类似的东西 answer

select idTag, GROUP_CONCAT(idWord order by position ASC SEPARATOR '-') AS idWordSet
from tTagWord
group by idTag
Having COUNT(idWordSet) > 1;

但我似乎找不到办法。有什么想法吗?

最佳答案

尝试两个 group by 怎么样?

SELECT words, count(*), group_concat(idtag) as tags
FROM (SELECT idTag, GROUP_CONCAT(idWord order by position ASC SEPARATOR ' ') AS words
      FROM tTagWord
      GROUP BY idTag
     ) t
GROUP BY words
HAVING count(*) > 1;

关于mysql - 在 SQL 的一对多关系中查找重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25878151/

相关文章:

从 mysqldump 恢复单个数据库的 mysql

sql - 存储过程运行速度比查询慢很多

arrays - 在给定成功搜索概率的情况下,如何找到执行基本操作的次数?

javascript - 从 UI/UX 开发中抛弃 jQuery

单击按钮并运行 $.ajax 函数时,php mysql 不保存数据

Mysql:允许Null的意思

sql - 在PL/SQL中反转字符串的过程

c - 为什么前几个字符串赋值比较慢?

mysql - HikariCP 连接池在 spring-batch 4.0 中挂起

sql - 权限问题阻止数据库访问