DB2 - Problem description
Problem IC98160 | Status: Closed |
POSSIBLE INCORRECT RESULT ON MULTIPLE OUTER JOINS AND A COMBINATION OF EQUALITY JOIN PREDICATES AND LOCAL PREDICATES | |
product: | |
DB2 FOR LUW / DB2FORLUW / A50 - DB2 | |
Problem description: | |
In a rare scenario, a SELECT statement on a stack of outer joins may return incorrect result. The following conditions are required for the problem. 1. There are at least 3 outer joins. 2. The join predicates in the 3 outer joins are equality joins. 3. The top outer join has the next two outer joins as the null-producing table. 4. The second outer join from the top returns some column from the null-producing table on the outer join. 5. There is an equality join predicate on the output column in 4. 6. There is an equality predicate on the join column in a WHERE clause on the outer joins. 7. There is a second equality predicate in a WHERE clause on the output column in 4. To demonstrate these conditions, an example is given below: SET SCHEMA "TEST"; CREATE TABLE "TEST"."T1" ( "OBJECTID" CHAR(10) NOT NULL , "OWNER" VARCHAR(10) , "CODE1" VARCHAR(5) NOT NULL , "CODE2" VARCHAR(5) NOT NULL ); INSERT INTO "TEST"."T1" VALUES ('3UZ','USER1','99','KT'), ('9RY','ADMIN','99','KT') ; CREATE TABLE "TEST"."T2" ( "CODE1" VARCHAR(5) NOT NULL , "CODE3" VARCHAR(4) ); INSERT INTO "TEST"."T2" VALUES ('99','2013'), ('-1','2013') ; CREATE TABLE "TEST"."T0" ( "CODE1" VARCHAR(5) NOT NULL , "CODE3" VARCHAR(4) NOT NULL ); SELECT V2.OBJECTID, V2.CODE1, V2.CODE3, V2.OWNER FROM T0 LEFT OUTER JOIN /* Condition 1: OUTER JOIN #1 */ ( SELECT T1.OBJECTID, T1.OWNER, T1.CODE1, T2.CODE3 /* Condition 4: A column from the null-producing table is an output column */ FROM T1 LEFT OUTER JOIN T2 /* Condition 1: OUTER JOIN #2 */ ON T1.CODE1 = T2.CODE1 /* Condition 2: Equality join predicate */ LEFT OUTER JOIN T2 T3 /* Condition 1: OUTER JOIN #3 */ ON T1.CODE1 = T3.CODE1 /* Condition 2: Equality join predicate */ WHERE T1.CODE2 = 'KT' ) AS V2(OBJECTID, CODE1, OWNER, CODE3) /* Condition 3: T0 LEFT JOIN (T1 LEFT JOIN T2 LEFT JOIN T2) */ /* The top outer join has the two lower outer joins as an input on the right table of its LEFT OUTER JOIN, or, in other word, as the null-producing table. */ ON T0.CODE1 = V2.CODE1 /* Condition 2: Equality join predicate */ AND T0.CODE3 = V2.CODE3 /* Condition 5: Equality join predicate on the column in Condition 4 */ WHERE T0.CODE1 = '99' /* Condition 6: An equality predicate on the join column in the WHERE clause */ AND T0.CODE3 = '2013' /* Condition 7: An equality predicate on the column from Condition 4 */ ; The result incorrectly returns the duplicate rows of the first two records. The correct result is only the first two rows. OBJECTID CODE1 CODE3 OWNER ---------- ----- ----- ---------- 3UZ 99 2013 USER1 9RY 99 2013 ADMIN 9RY 99 2013 ADMIN 3UZ 99 2013 USER1 | |
Problem Summary: | |
**************************************************************** * USERS AFFECTED: * * All users * **************************************************************** * PROBLEM DESCRIPTION: * * See Error Description * **************************************************************** * RECOMMENDATION: * * Upgrade to db2 Version 10.5 FixPack 3 * **************************************************************** | |
Local Fix: | |
available fix packs: | |
DB2 Version 10.5 Fix Pack 3 for Linux, UNIX, and Windows | |
Solution | |
Problem was first fixed in Version 10.5 FixPack 3 | |
Workaround | |
not known / see Local fix | |
Timestamps | |
Date - problem reported : Date - problem closed : Date - last modified : | 05.12.2013 04.03.2014 07.04.2015 |
Problem solved at the following versions (IBM BugInfos) | |
Problem solved according to the fixlist(s) of the following version(s) | |
10.5.0.3 | |
10.5.0.3 |