You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何高效检查表中所有列的重复行?

批量查找多列表中的重复行并查看列值

当表有数十列,手动指定所有列名太麻烦时,试试以下几种可行方案:

方案1:借助数据库元数据自动生成列名

不同数据库获取表列名的方式不同,先查列名再拼接SQL:

MySQL/MariaDB

先获取目标表的所有列名:

SELECT GROUP_CONCAT(COLUMN_NAME SEPARATOR ', ')
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA = '你的数据库名' AND TABLE_NAME = 'mytable';

把查询结果替换到下面的GROUP BY子句中,就能得到完整的查重SQL:

SELECT *, COUNT(*) AS duplicate_count
FROM mytable
GROUP BY [上面查询得到的列名列表]
HAVING COUNT(*) > 1;

PostgreSQL

获取列名:

SELECT string_agg(column_name, ', ')
FROM information_schema.columns
WHERE table_schema = 'public' AND table_name = 'mytable';

替换后生成最终SQL,逻辑和MySQL一致。

SQL Server

获取列名:

SELECT STRING_AGG(COLUMN_NAME, ', ')
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'mytable' AND TABLE_SCHEMA = 'dbo';

同样替换到GROUP BY子句即可。

方案2:用窗口函数查看所有重复行的具体内容

如果需要看到每一行重复的完整数据(而非分组汇总),用ROW_NUMBER()窗口函数:

SELECT *
FROM (
    SELECT *,
           ROW_NUMBER() OVER (PARTITION BY [所有列名] ORDER BY (SELECT NULL)) AS rn
    FROM mytable
) t
WHERE rn > 1;

这里的PARTITION BY同样用元数据查询得到的列名列表替换,就能列出所有重复的行,包括每行的细节。

方案3:SQL Server专属简化写法

SQL Server支持GROUP BY ALL语法,可直接写:

SELECT *, COUNT(*) AS duplicate_count
FROM mytable
GROUP BY ALL *
HAVING COUNT(*) > 1;

注意:这个语法仅适用于SQL Server,其他数据库不支持。

内容的提问来源于stack exchange,提问作者יואב שובב

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 20:50:32