1. 我正在try 查找表中的所有行,其中的某一列在其中重复.并通过每行具有的唯一的id列来标识它们.

  2. 我想删除它们,只保留一份(行),无论是哪一份都无所谓.(如果可以通过SQL完成,最好是这样,如果有说明,我会进行编码.)

(我正在使用工作台)

我试过这个:

SELECT 
  *
FROM
  table_name
GROUP BY `field_name`
HAVING COUNT(*) > 1;

It failed.
My first problem was the sql_mode=only_full_group_by, so I fixed it by adding field names to the query. and it worked.. well, sort of. Since now I saw only the aggregated result without the id column.

SELECT 
    field_name
FROM
    table_name
GROUP BY `field_name`
HAVING COUNT(*) > 1;

所以,我来了... 我该怎么做呢?

推荐答案

如果我没听错,您可以使用窗口函数:

select *
from (
    select t.*, count(*) over(partition by field_name) cnt
    from mytable t
) t
where cnt > 1

对于每一行,子查询执行窗口计数,以计算有多少行共享相同的field_name值.然后,外部查询对field_name不唯一的行进行筛选.

请注意,这需要MySQL8.0.在早期版本中,另一种 Select 是使用exists:

select *
from mytable t
where exists (
    select 1 
    from mytable t1 
    where t1.field_value = t.field_value and t1.id != t.id
)

Mysql相关问答推荐

加载数据本地infile,字段中有双引号和逗号

MySQL生成的整型计算可以为空吗?

MySQL binlog事件上的并发事务行为

如何防止程序中计数器出错

根据时间戳分组删除

如何通过SQL来计算到达特定值的行的数量

MySQL中的where语句会 destruct 全外连接.

为两个中的每一个 Select 最大和最小传递条件

try 在 .map 中使用 Favorite 选项卡进行react .我无法更改 mysql 表上的布尔类型

过滤查询结果

如何显示患者预约中的专业人员姓名?

默认为空字符串的列

我应该使用什么列数据类型来存储大量文本或 html

由于在 MySQL 中使用保留字作为表名或列名导致的语法错误

NodeJS/mySQL - ER_ACCESS_DENIED_ERROR 用户'root'@'localhost'的访问被拒绝(使用密码:是)

我可以在 PHP 中使用 PDO 创建数据库吗?

从另一个表中 Select 具有 id 的行

'LIKE ('%this%' OR '%that%') and something=else' 不起作用

在 MySQL 中仅 Select 仅包含字母数字字符的行

获得上个月的第一天和最后一天的最佳方式?