代码之家  ›  专栏  ›  技术社区  ›  StuPointerException

无重复的Oracle SQL语句

  •  -1
  • StuPointerException  · 技术社区  · 7 年前

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

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

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

    有人知道怎么做吗?感觉好像我错过了一些明显的东西。

    谢谢。

    3 回复  |  直到 7 年前
        1
  •  3
  •   D-Shih    7 年前

    你可以试着根据 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
    

    Results :

    | COL1 | COL2 |
    |------|------|
    |   10 |    A |
    |   11 |    B |
    |   12 |    C |
    
        2
  •  1
  •   Evan M    7 年前

    如果只需要第一列中的最小值,请执行以下操作:

    SELECT MIN(column1), column2
    FROM YourTable
    GROUP BY column2
    
        3
  •  0
  •   Martin Tuma    7 年前

    这在一个查询中是不可设置的,因为每列都有不同数量的唯一值。