В SQL «отличный» уменьшает количество строк результата с одного до нуля - PullRequest
1 голос
/ 27 января 2011

У меня есть оператор SQL следующей структуры:

select distinct ...
from table1,
(select from table2, table3, table4 where ...)
where ...
order by ...

При определенных значениях в предложениях where оператор возвращает ноль строк в наборе результатов.Когда я удаляю ключевое слово «разные», он возвращает одну строку.Я ожидаю увидеть одну строку результатов в обоих случаях.Есть ли какое-то свойство ключевого слова «Отдельное», о котором я не знаю и которое вызывает такое поведение?

База данных - Oracle 11g.

Ответы [ 2 ]

4 голосов
/ 27 января 2011

То, что вы описываете, не является ожидаемым поведением DISTINCT.Это:

SQL> select * from dual
  2  /

D
-
X

1 row selected.

SQL> select distinct * from dual
  2  /

D
-
X

1 row selected.

SQL>

Итак, если то, что вы говорите, действительно происходит, то происходит, то это ошибка.Тем не менее, вы также говорите, что это редкое явление, что означает, что есть большая вероятность того, что это некоторая особенность ваших данных и / или переходных процессов в вашей среде, а не ошибка.

Вам необходимо создать воспроизводимый тестслучай по двум причинам.Отчасти никто не сможет исследовать вашу проблему без таковой.Но главным образом потому, что создание тестового примера - это самостоятельное расследование: попытка выделить точную комбинацию данных и / или факторов окружающей среды часто дает понимание, которое приводит к решению.

1 голос
/ 27 января 2011

Оказалось, что один из подвыборов привел к набору данных, который содержал, среди прочего, строку, где каждый столбец был NULL. Кажется, что этот ряд повлиял на оценку DISTINCT неочевидным способом (по крайней мере, для меня). Возможно, это связано с некоторыми скрытыми оптимизациями SQL. После того, как я удалил причину этой строки, заполненной NULL, проблема исчезла, и оператор оценивает одну строку в результате, как и должно быть.

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