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

Oracle SQL中如何在两列上使用DISTINCT关键字实现各自去重?

解决两列各自独立去重的问题

我完全懂你的困扰——SELECT DISTINCT col001, col002确实达不到你想要的效果,因为DISTINCT是对整行的列组合去重,只有当col001和col002的值同时重复时,整行才会被过滤掉,这和你要的「两列各自独立去重」根本不是一回事。

最直接的解决方案:分开查询两列的去重值

如果只是想分别获取Col001和Col002的去重结果,最简单的方式就是执行两个独立的查询:

-- 获取Col001的所有唯一值
SELECT DISTINCT col001 
FROM tbl1 
WHERE col001 IS NOT NULL; -- 可选:过滤空值,根据你的实际数据需求调整

这个查询会返回你要的结果:555、7878、89

-- 获取Col002的所有唯一值
SELECT DISTINCT col002 
FROM tbl1 
WHERE col002 IS NOT NULL;

这个查询会返回:43、56、67、79

可选:在同一结果集中展示两列的去重值

如果需要把两个去重集合放在同一个结果表中展示(比如按行对齐),可以用CTE和窗口函数生成行号,再通过全外连接关联:

WITH unique_col001 AS (
    -- 给Col001的唯一值添加行号
    SELECT DISTINCT col001, ROW_NUMBER() OVER (ORDER BY col001) AS row_num
    FROM tbl1 
    WHERE col001 IS NOT NULL
),
unique_col002 AS (
    -- 给Col002的唯一值添加行号
    SELECT DISTINCT col002, ROW_NUMBER() OVER (ORDER BY col002) AS row_num
    FROM tbl1 
    WHERE col002 IS NOT NULL
)
-- 全外连接确保两个集合的所有值都能展示
SELECT uc1.col001, uc2.col002
FROM unique_col001 uc1
FULL OUTER JOIN unique_col002 uc2 ON uc1.row_num = uc2.row_num;

执行后会得到这样的结果:

col001col002
55543
787856
8967
NULL79

再明确下为什么原来的语句不行

当你用SELECT DISTINCT col001, col002时,数据库会把每一行的col001+col002组合当成一个整体去重。比如如果你的表中有两行是(555,43)和(555,43),这行会被去重,但如果是(555,43)和(555,56),这两行会被保留——因为它们的列组合不一样,这显然不是你想要的效果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 22:54:04