首页 > 解决方案 > 在MySQL中使用分区选择重复?

问题描述

我想从表中选择所有重复项:

SELECT * FROM people HAVING (count(*) OVER (PARTITION BY name)) > 1;

不幸的是我得到了错误:

Error Code: 3593. You cannot use the window function 'count' in this context. 

一种不太优雅的解决方案是:

SELECT 
    *
FROM
    people
WHERE
    code IN (SELECT 
            name
        FROM
            people
        GROUP BY name
        HAVING COUNT(*) > 1);

如何重写我的第一个查询以使其工作?

标签: mysqlsql

解决方案


如果code相同,则可以使用exists

select p.*
from people p 
where exists (select 1 from people p1 where p1.name = p.name and p.code <> p1.code);

如果整个表没有任何标识列,则如果code列没有标识功能,则使用标识列,那么您的方法适用于以下更新的查询:

SELECT p.*
FROM people p
WHERE name IN (SELECT name FROM people GROUP BY name HAVING COUNT(*) > 1);

推荐阅读