[
https://issues.jboss.org/browse/TEIID-5569?page=com.atlassian.jira.plugin...
]
Steven Hawkins commented on TEIID-5569:
---------------------------------------
We need an ifnull added in the first case:
{code}
SELECT pm1.g1.e1, pm1.g1.e2, ifnull(X__1.expr1, 0) AS expr3 FROM pm1.g1 LEFT OUTER JOIN
(SELECT COUNT(*) AS expr1, e1 FROM pm1.g2 GROUP BY e1) AS X__1 ON pm1.g1.e1 = X__1.e1
{code}
In the event of usage in the where clause, the default logic of an inner join does not
produce a correct result.
{code}
SELECT pm1.g1.e1, pm1.g1.e2 FROM pm1.g1 where e2 = /*+ MJ */ (select count(*) from pm1.g2
where e1 = pm1.g1.e1)
{code}
Actually needs a left outer join:
{code}
SELECT pm1.g1.e1, pm1.g1.e2 FROM pm1.g1 left outer join (SELECT COUNT(*) AS expr1, e1 FROM
pm1.g2 GROUP BY e1) AS X__1 on (pm1.g1.e1 = X__1.e1) WHERE (e2 = ifnull(X__1.expr1, 0))
{code}
Things get more complicated if the projected aggregate is nested in an expression. We
should dissallow that case.
Subquery unnesting with aggregates
----------------------------------
Key: TEIID-5569
URL:
https://issues.jboss.org/browse/TEIID-5569
Project: Teiid
Issue Type: Bug
Components: Query Engine
Reporter: Steven Hawkins
Assignee: Steven Hawkins
Priority: Blocker
Fix For: 12.0
A query such as:
{code}
SELECT pm1.g1.e1, pm1.g1.e2, /*+ MJ */ (select count(*) from pm1.g2 where e1 = pm1.g1.e1)
FROM pm1.g1
{code}
Where the subquery contains aggregates without a group by will produce a join plan such
that a group by is added to account for the projection of the e1 value for the join
predicate. However that will change the value from 0 to null for counts from pm1.g2 where
there are no matching rows.
--
This message was sent by Atlassian Jira
(v7.12.1#712002)