我有一个应该返回2行的查询.但是,它返回48行.它表现得就像其中一个正在加入的表格不存在.但是,如果我将该表中的列添加到select子句中,而不更改查询的from或where部分,则返回2行.
这是“解释计划”在选择中没有“m.*”的情况下说的:
在选择中添加m.*后再次出现:
谁能解释为什么它应该这样做?
更新:我们只在一个系统而不是另一个系统上遇到此问题. DBA验证了有问题的是运行optimizer_features_enable设置为10.2.0.5,而没有发生的是运行optimizer_features_enable设置为10.2.0.4.不幸的是,客户站点运行10.2.0.5.
最佳答案 这是关于10gR2中引入的连接消除:
Table elimination (alternately called
“join elimination”) removes redundant
tables from a query. A table is
redundant if its columns are only
referenced to in join predicates, and
it is guaranteed that those joins
neither filter nor expand the
resulting rows. There are several
cases where Oracle will eliminate a
redundant table.
也许这就是那种相关的错误.看看this文章.