DB2 - Problem description
| Problem IC63303 | Status: Closed |
POSSIBLE UNEXPECTED RESULTS IN SQL STATEMENT CONTAINING OR PREDICATE(S) WITH IN SUBQUERIES. | |
| product: | |
DB2 FOR LUW / DB2FORLUW / 970 - DB2 | |
| Problem description: | |
This problem could occur when all the following conditions are
met:
.
1) The SQL statement has an OR predicate with subquery of the
form
.
<col-1> IN (select <col-sq> from....) OR <other-subterm>
.
-OR-
<col-1> NOT IN (select <col-sq> from....) OR <other-subterm>
2) The statement also has an OR predicate with subquery of the
form
<col-2> IN (select <col-sq> from....) OR <other-subterm>
-OR-
<col-2> NOT IN (select <col-sq> from....) OR <other-subterm>
Note that the OR predicate in 1) and 2) could be the same OR
predicate or two different OR predicates
3) The <col-sq> in 1) and 2) must be the same value of a
constant, a host variable,
a parameter marker, or a special register such as CURRENT
DATE. In addition,
<col-sq> could be a normal column in the user written SQL
statement but is
substituted by DB2 Query Rewrite to one of those
aforementioned types,
which could be observed in the Optimized Statement of an
output of db2exfmt.
4) There are join predicates in other part of the same SQL
statement such that DB2 Optimizer
could derive the following relationship
<col-1> = <col-2> = <col-3>
An example of such join predicates is
<col-1> = <col-3> AND <col-2> = <col-3>
5) When all the above conditions are met, DB2 incorrectly
derives that
<col-1> = <col-2> = <col-3> = <col-sq>
In some certain choices of access plan where DB2 Optimizer
chooses to apply the two join predicates
<col-1> = <col-3> and <col-2> = <col-3> in the same join
operator, the Optimizer may not apply one of
the join predicates in 4). As a result, DB2 will produce
possibly more rows in the result set. | |
| Problem Summary: | |
This problem could occur when all the following conditions are
met:
.
1) The SQL statement has an OR predicate with subquery of the
form
.
<col-1> IN (select <col-sq> from....) OR <other-subterm>
.
-OR-
<col-1> NOT IN (select <col-sq> from....) OR <other-subterm>
2) The statement also has an OR predicate with subquery of the
form
<col-2> IN (select <col-sq> from....) OR <other-subterm>
-OR-
<col-2> NOT IN (select <col-sq> from....) OR <other-subterm>
Note that the OR predicate in 1) and 2) could be the same OR
predicate or two different OR predicates
3) The <col-sq> in 1) and 2) must be the same value of a
constant, a host variable,
a parameter marker, or a special register such as CURRENT
DATE. In addition,
<col-sq> could be a normal column in the user written SQL
statement but is
substituted by DB2 Query Rewrite to one of those
aforementioned types,
which could be observed in the Optimized Statement of an
output of db2exfmt.
4) There are join predicates in other part of the same SQL
statement such that DB2 Optimizer
could derive the following relationship
<col-1> = <col-2> = <col-3>
An example of such join predicates is
<col-1> = <col-3> AND <col-2> = <col-3>
5) When all the above conditions are met, DB2 incorrectly
derives that
<col-1> = <col-2> = <col-3> = <col-sq>
In some certain choices of access plan where DB2 Optimizer
chooses to apply the two join predicates
<col-1> = <col-3> and <col-2> = <col-3> in the same join
operator, the Optimizer may not apply one of
the join predicates in 4). As a result, DB2 will produce
possibly more rows in the result set. | |
| Local Fix: | |
| available fix packs: | |
DB2 Version 9.7 Fix Pack 1 for Linux, UNIX, and Windows | |
| Solution | |
module engn_sqnr fixed >= v97 fpk1 | |
| Workaround | |
not known / see Local fix | |
| Timestamps | |
Date - problem reported : Date - problem closed : Date - last modified : | 21.09.2009 11.02.2010 11.02.2010 |
| Problem solved at the following versions (IBM BugInfos) | |
9.7.FPk1 | |
| Problem solved according to the fixlist(s) of the following version(s) | |
| 9.7.0.1 |
|