OracleSQL - выберите ВСЕ столбцы с DISTINCT для одного столбца - PullRequest
0 голосов
/ 28 января 2019

Я использую 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 голосов
/ 29 января 2019

Я тоже не могу воспроизвести вашу проблему.

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;

Если эта проблема действительно возникает, в одной таблице должны быть строки, которых нет в другой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...