如何查找删除重复记录,获取两列distinct值?求正确实现方法
解决数据集去重:分别提取两列唯一值
你的需求核心是分别保留col1的所有非空唯一值、col2的所有非空唯一值,而非整行去重或关联两列数据。用自连接不符合预期的原因很明确:自连接会让两列的唯一值产生笛卡尔积(比如col1的3个唯一值和col2的3个唯一值两两配对,得到9条冗余记录),完全偏离了你的需求。
下面是两种可行的解决方法:
方法1:用DISTINCT + UNION ALL拆分查询
拆分两部分分别提取唯一值,再合并结果:
-- 提取col1的非空唯一值,col2补null SELECT DISTINCT col1, NULL AS col2 FROM your_table WHERE col1 IS NOT NULL UNION ALL -- 提取col2的非空唯一值,col1补null SELECT DISTINCT NULL AS col1, col2 FROM your_table WHERE col2 IS NOT NULL;
方法2:用GROUP BY聚合唯一值
通过GROUP BY直接聚合出每列的唯一值:
-- 聚合col1的非空唯一值 SELECT col1, NULL AS col2 FROM your_table WHERE col1 IS NOT NULL GROUP BY col1 UNION ALL -- 聚合col2的非空唯一值 SELECT NULL AS col1, col2 FROM your_table WHERE col2 IS NOT NULL GROUP BY col2;
两种方法最终都会得到你需要的结果:3条col1唯一值记录 + 3条col2唯一值记录,共6条目标唯一记录。
内容的提问来源于stack exchange,提问作者user22723185
相关产品推荐
相关产品推荐

