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

SQL技术问询:如何选取ID相同且其余所有列值均一致的行

选取ID相同且所有其他列值一致的行的解决方案

数据库SQL实现

方法1:GROUP BY + HAVING 关联原表

适用于所有支持基础SQL语法的数据库,核心逻辑是先定位重复的ID+列组合,再关联原表提取完整行:

-- 替换your_table为表名,col1~col20为其余20个列名
SELECT t.*
FROM your_table t
JOIN (
    SELECT id, col1, col2, ..., col20
    FROM your_table
    GROUP BY id, col1, col2, ..., col20
    HAVING COUNT(*) > 1
) dup ON t.id = dup.id 
    AND t.col1 = dup.col1 
    AND t.col2 = dup.col2 
    -- 依次补全剩下的列匹配条件
    AND t.col20 = dup.col20
ORDER BY t.id;

方法2:窗口函数(推荐,写法更简洁)

适用于支持窗口函数的数据库(如MySQL 8.0+、PostgreSQL、SQL Server),直接为每行标记重复次数,筛选出重复行:

SELECT *
FROM (
    SELECT *,
           COUNT(*) OVER (PARTITION BY id, col1, col2, ..., col20) AS dup_count
    FROM your_table
) t
WHERE dup_count > 1
ORDER BY id;

进阶技巧:自动生成列名(避免手动写20列)

如果列数多不想逐个输入,可借助数据库系统表生成列名,以MySQL为例:

-- 替换your_database和your_table为实际库名、表名
SELECT GROUP_CONCAT(DISTINCT column_name SEPARATOR ', ')
FROM information_schema.columns
WHERE table_schema = 'your_database' 
  AND table_name = 'your_table' 
  AND column_name != 'id';

执行后复制结果,直接替换SQL中的col1, col2, ..., col20即可。

Python Pandas实现

如果用Python处理数据,可通过pandas的duplicated函数快速筛选:

import pandas as pd

# 读取数据,替换为你的数据源路径
df = pd.read_csv('your_data.csv')
# 定义需要检查重复的列:ID + 其余20列
check_cols = ['id'] + [f'col{i}' for i in range(1, 21)]
# 获取所有重复行(keep=False会标记所有重复项,而非仅标记后续重复行)
duplicate_rows = df[df.duplicated(subset=check_cols, keep=False)]
# 输出或保存结果
print(duplicate_rows)
# duplicate_rows.to_csv('duplicate_results.csv', index=False)

内容的提问来源于stack exchange,提问作者Lengus

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 04:40:24