首页 > 解决方案 > 无重复的 Oracle SQL 语句

问题描述

我需要编写一个 SQL 语句来返回 2 列,但是这些列中的任何一个都不能重复。例如:

|---------------------|------------------|
|          10         |        A         |
|---------------------|------------------|
|          11         |        B         |
|---------------------|------------------|
|          12         |        C         |
|---------------------|------------------|
|          13         |        A         | <--- Don't return
|---------------------|------------------|

使用 distinct 不起作用,因为上面突出显示的行是不同的。返回哪个副本也无关紧要。

有谁知道这样做的方法?感觉好像我错过了一些明显的东西。

谢谢。

标签: sqloracle

解决方案


您可以尝试制作行号col2并获取rn = 1数据行。

CREATE TABLE T(
   col1 int,
   col2 varchar(5)
);


insert into t values (10,'A');
insert into t values (11,'B');
insert into t values (12,'C');
insert into t values (13,'A'); 

查询 1

SELECT t1.col1,t1.col2
FROM (
    SELECT t1.*,ROW_NUMBER() OVER(PARTITION BY col2 ORDER BY col1) rn
    FROM T t1
)t1
WHERE t1.rn = 1

结果

| COL1 | COL2 |
|------|------|
|   10 |    A |
|   11 |    B |
|   12 |    C |

推荐阅读