mysql - 在 MySQL 中使用分区选择重复项?

标签 mysql sql

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

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);

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

最佳答案

如果代码相同,那么您可以使用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);

关于mysql - 在 MySQL 中使用分区选择重复项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55730760/

相关文章:

mysql - 如何在 MySQL 查询中进行正则表达式

php - 外键相关的 Laravel 5 迁移错误

sql - MSSQL 到 MySQL API 转换层

mysql - 限制 group_concat 中的串联

sql - Ruby 中的 pretty-print SQL

php - MySQL 返回结果的时间太长

mysql - SELECT 没有行也没有列?

php - Mysqli 期望行数作为参数

php - 我如何允许空白字段被我的数据库接受为空?

java - 如何将mysql数据库中的日期时间格式转换为正常的am/pm格式?