You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@calcite.apache.org by "libopeng (Jira)" <ji...@apache.org> on 2023/07/28 08:43:00 UTC

[jira] [Created] (CALCITE-5880) When the association condition of the association subquery is 'is not distinct from', the join condition becomes '=' after decorrelation.

libopeng created CALCITE-5880:
---------------------------------

             Summary: When the association condition of the association subquery is 'is not distinct from', the join condition becomes '=' after decorrelation.
                 Key: CALCITE-5880
                 URL: https://issues.apache.org/jira/browse/CALCITE-5880
             Project: Calcite
          Issue Type: Bug
            Reporter: libopeng


{code:java}
select EMPNO 
from emp
where EXISTS (select DEPTNO from dept where emp.EMPNO is not DISTINCT from dept.DEPTNO){code}
before decorrelation
{code:java}
LogicalProject(EMPNO=[$0])
  LogicalFilter(condition=[IS NOT NULL($9)])
    LogicalCorrelate(correlation=[$cor0], joinType=[left], requiredColumns=[{0}])
      LogicalTableScan(table=[[CATALOG, SALES, EMP]])
      LogicalAggregate(group=[{}], agg#0=[MIN($0)])
        LogicalProject($f0=[true])
          LogicalFilter(condition=[OR(AND(IS NULL($cor0.EMPNO), IS NULL($0)), IS TRUE(=($cor0.EMPNO, $0)))])    <---   here is 't1.x is not distinct from t2.x'
            LogicalTableScan(table=[[CATALOG, SALES, DEPT]])
{code}
after decorrelation

 
{code:java}
LogicalProject(EMPNO=[$0])
  LogicalFilter(condition=[IS NOT NULL($9)])
    LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8], $f0=[$13])
      LogicalJoin(condition=[AND(=($0, $11), =($9, $12))], joinType=[left])        <---here is 't1.x=t2.x and (t1.x is null = t2.x is null)'
        LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8], $f9=[false], EMPNO0=[$0])
          LogicalTableScan(table=[[CATALOG, SALES, EMP]])
        LogicalAggregate(group=[{0, 1}], agg#0=[MIN($2)])
          LogicalProject(EMPNO=[$2], $f9=[$3], $f0=[true])
            LogicalJoin(condition=[=($2, $0)], joinType=[inner])
              LogicalTableScan(table=[[CATALOG, SALES, DEPT]])
              LogicalProject(EMPNO=[$0], $f9=[false])
                LogicalTableScan(table=[[CATALOG, SALES, EMP]])  {code}
 
{code:java}

    EMP               |         DEPT
+---------+           |      +---------+
| EMPNO  |            |      | DEPTNO |
+---------+           |      +---------+
| null |              |      | null   |
           {code}
expect result
{code:java}
  EMPNO
+-------+
|  null |
+-------+{code}
actual result

 
{code:java}
  EMPNO
+-------+
+-------+ {code}
 



--
This message was sent by Atlassian Jira
(v8.20.10#820010)