矛盾的Oracle查询结果

Arc*_*ane 8 sql oracle

我执行两个查询并得到奇怪的结果.我想知道为什么会这样.
现在查询:

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;
Run Code Online (Sandbox Code Playgroud)

结果为空.

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;
Run Code Online (Sandbox Code Playgroud)

结果是1.

它实际上是具有不同返回值的相同查询.
表A包含'a'字段= 123的
行.表B不包含aa = ba的行

如何为同一查询返回任何内容或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;
Run Code Online (Sandbox Code Playgroud)

它运作正常.

Cod*_*odo 1

可能您的索引或外键约束与表数据不一致。由于这两个查询很可能使用不同的索引,因此它们返回不一致的数据。

您是否暂时禁用了约束,或者在未验证它们最初是否有效的情况下设置了它们 ( ENABLE NOVALIDATE)?

尝试重建索引并删除并重新创建外键约束,看看这是否可以解决您的问题。