如何筛选数据库列中的唯一记录?SELECT语句去重相关疑问
获取Column2值仅出现一次的SQL查询方案
你说得完全对,DISTINCT确实解决不了这个问题——它只是去除完全重复的行,没法筛选出column2值仅出现一次的记录。要实现你要的效果,有两种常用的SQL方案,适配不同的数据库场景:
方案1:使用GROUP BY + HAVING子查询(兼容绝大多数数据库)
这种方法先通过子查询找出所有仅出现一次的column2值,再关联原表取出对应的完整行:
SELECT t.* FROM your_table t JOIN ( SELECT column2 FROM your_table GROUP BY column2 HAVING COUNT(*) = 1 ) sub_query ON t.column2 = sub_query.column2;
逻辑说明:
- 内层子查询:按column2分组,统计每组的行数,只保留行数等于1的column2值(也就是仅出现一次的那些值)
- 外层查询:通过JOIN关联原表,把这些唯一值对应的完整行筛选出来
方案2:使用窗口函数(适用于支持窗口函数的数据库,如MySQL 8+、PostgreSQL、SQL Server等)
这种方法更直观,不需要额外的JOIN操作,通过窗口函数直接给每一行标记其column2值的出现次数:
SELECT id, column2, column3 FROM ( SELECT *, COUNT(*) OVER(PARTITION BY column2) AS occurrence_count FROM your_table ) temp_table WHERE occurrence_count = 1;
逻辑说明:
- 内层子查询:用
COUNT(*) OVER(PARTITION BY column2)给每一行计算它所在column2分组的总行数(也就是该column2值的出现次数) - 外层查询:筛选出出现次数等于1的行,就是你要的结果
针对你提供的示例数据,两种方案都会返回:
1 UNID1 data1 6 UNID6 data4
内容的提问来源于stack exchange,提问作者dubis
相关产品推荐
相关产品推荐

