使用 Mysql 获取所有重复的术语的名称

Get the name of all term which is duplicate using Mysql

我正在编写代码以使用 mysql 查询获取所有具有重复名称的重复术语。我目前遇到的问题是我一次获得记录我需要所有具有相同名称的数据。

我是运行这个查询。

SELECT a.*,COUNT(name) AS occurrences 
            FROM wp_terms AS a 
            INNER JOIN wp_term_taxonomy AS b ON a.term_id = b.term_id  
            WHERE b.taxonomy = "ticker"
            GROUP BY a.name HAVING occurrences > 1'

当前结果

[0] => stdClass Object
        (
            [term_id] => 13872
            [name] => AAV
            [slug] => aav
            [term_group] => 0
            [occurrences] => 2
        )

预期结果

[0] => stdClass Object
            (
                [term_id] => 13872
                [name] => AAV
                [slug] => aav
                [term_group] => 0
                [occurrences] => 2
            )
    [1] => stdClass Object
            (
                [term_id] => 13873
                [name] => AAV
                [slug] => aav-2
                [term_group] => 0
                [occurrences] => 2
            )

有什么想法吗?

您可以使用 window 函数获取匹配的行:

SELECT t.*
FROM (SELECT t.*, 
             COUNT(*) OVER (PARTITION BY t.name) as cnt
      FROM wp_terms t JOIN
           wp_term_taxonomy tt
           ON t.term_id = tt.term_id  
      WHERE tt.taxonomy = 'ticker'
    ) t
WHERE cnt > 1
ORDER BY cnt DESC, name;

编辑:

MySQL 的旧版本中有多种方法。一个是:

SELECT t.*, 
       (SELECT COUNT(*)
        FROM wp_term_taxonomy tt
        WHERE tt.term_id = t.term_id AND
              tt.taxonomy = 'ticker'
    ) t
FROM wp_terms t
HAVING cnt > 1
ORDER BY cnt DESC, name;