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

时间:2019-01-28 19:06:02

标签: sql oracle

我正在使用Oracle SQL,并在查询特定列的不同值时尝试获取所有返回的列。我尝试使用在这里找到的其他答案,但未获得预期的结果。

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

select distinct name
from relationships;

我的尝试基于在SO上找到的其他答案(返回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 个答案:

答案 0 :(得分:0)

我也无法复制您的问题。

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;

如果确实发生此问题,则一个表中的行应该不在另一个表中。