[teiid-issues] [JBoss JIRA] (TEIID-5569) Subquery unnesting with aggregates
Steven Hawkins (Jira)
issues at jboss.org
Tue Dec 11 14:39:00 EST 2018
[ https://issues.jboss.org/browse/TEIID-5569?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13673424#comment-13673424 ]
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)
More information about the teiid-issues
mailing list