Противоречивый результат запроса Oracle - PullRequest
8 голосов
/ 16 января 2012

Я выполняю два запроса и получаю странный результат. Я хотел бы знать, почему это происходит.
Теперь запросы:

SELECT * FROM TABLE_A a, TABLE_B b, TABLE_C c
  WHERE a.a = b.a (+)
  AND b.c = c.c
  AND a.a = 123;

Результат пуст.

SELECT COUNT(*) FROM TABLE_A a, TABLE_B b, TABLE_C c
  WHERE a.a = b.a (+)
  AND b.c = c.c
  AND a.a = 123;

Результат равен 1.

Это действительно один и тот же запрос с другим возвращаемым значением.
Таблица A содержит строку с полем 'a' = 123.
Таблица B не содержит строк, так как a.a = b.a.

Как можно вернуть ничего или 1 для одного и того же запроса?


Обновление:

Когда я делаю так

SELECT COUNT(*) FROM TABLE_A a, TABLE_B b, TABLE_C c
  WHERE a.a = b.a (+)
  AND b.c = c.c (+)
  AND a.a = 123;

Работает нормально.

1 Ответ

1 голос
/ 16 января 2012

Возможно, у вас есть индексы или ограничения внешнего ключа, которые не согласуются с данными таблицы. Поскольку эти два запроса, скорее всего, используют разные индексы, они возвращают противоречивые данные.

Вы временно отключили ограничения или установили их без проверки того, что они изначально действительны (ENABLE NOVALIDATE)?

Попробуйте перестроить индексы, отбросить и воссоздать ограничения внешнего ключа, чтобы посмотреть, решит ли это вашу проблему.

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