DB2 - Problem description
| Problem IC81476 | Status: Closed |
FED: WRONG RESULT RETURNED BY FEDERATION SERVER | |
| product: | |
DB2 FOR LUW / DB2FORLUW / 950 - DB2 | |
| Problem description: | |
If there is an exists subquery in the head expression, this
subquery will be pushed down and the original sql statement will
be converted to a join sql statement.
For example, in the following sql statement, nick1 and nick2 are
nicknames and there is an exists subquery in the head
expression:
select ((case when exists(select * from nick1 where c2='aaa')
then 'TRUE' else 'FALSE' end)) from nick2;
DB2 compiler will rewrite it to:
Optimized Statement:
-------------------
SELECT
CASE
WHEN (1 = Q3.$C0)
THEN 'TRUE'
ELSE 'FALSE' END
FROM
(SELECT DISTINCT Q2.$C0
FROM
(SELECT 1
FROM IIDEV22.NICK1 AS Q1
WHERE (Q1.C2 = 'aaa ')) AS Q2) AS Q3, IIDEV22.NICK2
AS Q4 =
In this scenario, federation pda(pushdown analysis) component
will push down all the subquery to remote data source which
cause the wrong result. | |
| Problem Summary: | |
**************************************************************** * USERS AFFECTED: * * all platforms * **************************************************************** * PROBLEM DESCRIPTION: * * If there is an exists subquery in the head expression, this * * subquery will be pushed down and the original sql statement * * will * * be converted to a join sql statement. * * * * For example, in the following sql statement, nick1 and nick2 * * are * * nicknames and there is an exists subquery in the head * * expression: * * select ((case when exists(select * from nick1 where * * c2='aaa') * * then 'TRUE' else 'FALSE' end)) from nick2; * * * * DB2 compiler will rewrite it to: * * Optimized Statement: * * ------------------- * * SELECT * * CASE * * WHEN (1 = Q3.$C0) * * THEN 'TRUE' * * ELSE 'FALSE' END * * FROM * * (SELECT DISTINCT Q2.$C0 * * FROM * * (SELECT 1 * * FROM IIDEV22.NICK1 AS Q1 * * WHERE (Q1.C2 = 'aaa ')) AS Q2) AS Q3, * * IIDEV22.NICK2 * * AS Q4 = * * * * In this scenario, federation pda(pushdown analysis) * * component * * will push down all the subquery to remote data source which * * cause the wrong result. * **************************************************************** * RECOMMENDATION: * * upgrade to v95fp10 * **************************************************************** | |
| Local Fix: | |
Change the exists subquery to "count(*) > 0" clause | |
| Solution | |
upgrade to v95fp10 | |
| Workaround | |
NA | |
| Timestamps | |
Date - problem reported : Date - problem closed : Date - last modified : | 16.02.2012 13.03.2012 13.03.2012 |
| Problem solved at the following versions (IBM BugInfos) | |
9.5.FP10 | |
| Problem solved according to the fixlist(s) of the following version(s) | |
| 9.5.0.10 |
|