矛盾的Oracle查询结果

时间:2012-01-16 14:58:45

标签: 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;

结果为空。

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 个答案:

答案 0 :(得分:1)

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

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

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