home clear 64x64
en blue 200x116 de orange 200x116 info letter User
suche 36x36
Latest versionsfixlist
11.1.0.7 FixList
10.5.0.9 FixList
10.1.0.6 FixList
9.8.0.5 FixList
9.7.0.11 FixList
9.5.0.10 FixList
9.1.0.12 FixList
Have problems? - contact us.
Register for free anmeldung-x26
Contact form kontakt-x26

DB2 - Problem description

Problem IT05401 Status: Closed

IN A RARE CONDITION, A QUERY OF A CHAIN OF EQUALITY JOIN PREDICATES BETWEEN
4 OR MORE TABLES COULD PRODUCE EXTRA ROWS

product:
DB2 FOR LUW / DB2FORLUW / A10 - DB2
Problem description:
This problem deals with inner joins between 4 or more tables 
and an outer join. 
 
  For a chain of join predicates between 4 columns, we need to 
apply at least 3 join predicates among the 4 columns. This APAR 
documents a case where only 2 join predicates are applied and a 
redundant predicate is incorrectly picked up. 
 
  Assume we have tables A, B, C, D and X with the definitions 
shown in the following SQL: 
 
  set schema test; 
    create table A(a1 int, a2 varchar(12)); 
    create table B(b1 int, b2 varchar(12)); 
    create table C(c1 int, c2 varchar(12)); 
    create table D(d1 int, d2 varchar(12)); 
    create table X(x1 int, x2 varchar(12)); 
 
  An example of this problem is illustrated by the following 
SQL: 
 
  select a2, b2, c2, d2 
  from   c 
       inner join d on c2=d2 
       left join x on c1=x1 
       inner join a on c2=a2 
       inner join b on a1=b1 and d2=b2 
  ; 
 
  If DB2 chooses an access plan with the following join order: 
 
  ( ( C inner join D ) outer join X ) ... [1] 
    inner join                        ... [2] 
  ( A inner join B )                  ... [3] 
 
  and the inner join in [2] is a hash join. The order of [1] and 
[3] may be swapped, that is, either [1] HSJOIN [3], or [3] 
HSJOIN [1] could trigger the problem. 
 
  A sample data and small twist on the statistic in the SQL 
below demonstrate the result of those extra rows. 
 
  insert into C values (1, '1'); 
  insert into D values (1, '1'); 
  insert into A values (1, '1'); 
  insert into B values (1, '1'); 
  insert into B values (1, 'extra row'); 
  insert into B values (1, 'extra row'); 
 
  runstats on table test.A; 
  runstats on table test.B; 
  runstats on table test.C; 
  runstats on table test.D; 
  runstats on table test.X; 
 
  -- To influence the optimizer to join A and B first 
  update sysstat.columns set colcard=3 where tabschema='TEST' 
and tabname='B' and colname='B1'; 
 
  Then, the 2 "extra row"s of B are returned in the result set 
because the join predicate d2=b2 is incorrectly picked to be the 
redundant predicate and by not applying it. 
 
  A2             B2            C2           D2 
  ------------ ------------ ------------ ------------ 
  1            1            1            1 
  1            extra row    1            1 
  1            extra row    1            1 
 
  3 record(s) selected.
Problem Summary:
**************************************************************** 
* USERS AFFECTED:                                              * 
* All users                                                    * 
**************************************************************** 
* PROBLEM DESCRIPTION:                                         * 
* See Error Description                                        * 
**************************************************************** 
* RECOMMENDATION:                                              * 
* Upgrade to DB2 version 10.1.0.5.                             * 
****************************************************************
Local Fix:
Setting the optimization level to 3, 1 or 0 as the command 
"db2 set current query optimization 3" could avoid the problem.
Solution
The problem is first fixed in DB2 version 10.1.0.5.
Workaround
not known / see Local fix
Timestamps
Date  - problem reported    :
Date  - problem closed      :
Date  - last modified       :
06.11.2014
10.07.2015
10.07.2015
Problem solved at the following versions (IBM BugInfos)
Problem solved according to the fixlist(s) of the following version(s)
10.1.0.5 FixList
10.5.0.5 FixList