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

OracleSQL-选择一列上具有DISTINCT的所有列

  •  1
  • demluckycharms  · 技术社区  · 6 年前

    我使用的是oraclesql,并且在查询特定列上的不同值时,尝试获取返回的所有列。我试着用我在这里找到的其他答案,但我没有得到预期的结果。

    以下是distinct字段查询(返回3203个结果):

    select distinct name
    from relationships;
    

    我的尝试基于我在这里找到的其他答案(返回2071个结果):

    select *
    from (
       select relationships.*, row_number() 
       over (partition by name order by dbms_random.random) 
       as row_number 
       from relationships
       ) relationships
    where row_number = 1;
    

    所以,既然两个查询和我得到的结果之间有如此大的差异,我一定是做错了什么。

    1 回复  |  直到 6 年前
        1
  •  0
  •   eaolson    6 年前

    我也不能复制你的问题。

    SQL> create table mytable as select object_name, object_type from dba_objects;
    
    Table created.
    
    SQL> insert into mytable select object_name, null from dba_objects;
    
    22491 rows created.
    
    SQL> select count(*) from mytable;
    
      COUNT(*)
    ----------
         44982
    
    SQL> select count(*) from (select distinct object_name from mytable );
    
      COUNT(*)
    ----------
         15701
    
    SQL> select count(*)
      2  from (
      3     select mytable.*, row_number()
      4     over (partition by object_name order by dbms_random.random)
      5     as row_number
      6     from mytable
      7     ) mytable
      8  where row_number = 1;
    
      COUNT(*)
    ----------
         15701
    

    我将根据您的两个查询创建表,并查找它们之间的差异。比如:

    create table tab1 as select distinct name from relationships;
    

    如果这个问题真的发生了,那么一个表中应该有不在另一个表中的行。