diff --git a/pkg/planner/core/expression_rewriter.go b/pkg/planner/core/expression_rewriter.go index 0d5caa6632fe4..83407cc254b66 100644 --- a/pkg/planner/core/expression_rewriter.go +++ b/pkg/planner/core/expression_rewriter.go @@ -1244,6 +1244,11 @@ func (er *expressionRewriter) handleInSubquery(ctx context.Context, planCtx *exp copy(join.OutputNames(), planCtx.plan.OutputNames()) copy(join.OutputNames()[planCtx.plan.Schema().Len():], agg.OutputNames()) join.AttachOnConds(expression.SplitCNFItems(checkCondition)) + // set FullSchema and FullNames for this join + if left, ok := planCtx.plan.(*logicalop.LogicalJoin); ok && left.FullSchema != nil { + join.FullSchema = left.FullSchema + join.FullNames = left.FullNames + } // Set join hint for this join. if planCtx.builder.TableHints() != nil { join.SetPreferredJoinTypeAndOrder(planCtx.builder.TableHints()) diff --git a/tests/integrationtest/r/planner/core/issuetest/planner_issue.result b/tests/integrationtest/r/planner/core/issuetest/planner_issue.result index a56fab9dd5d75..26f086d1d7e4b 100644 --- a/tests/integrationtest/r/planner/core/issuetest/planner_issue.result +++ b/tests/integrationtest/r/planner/core/issuetest/planner_issue.result @@ -718,3 +718,8 @@ Projection_11 6.00 root 1->Column#18 └─Projection_17(Probe) 10000.00 root cast(test.t61a85298.col_71, double BINARY)->Column#19 └─TableReader_19 10000.00 root data:TableFullScan_18 └─TableFullScan_18 10000.00 cop[tikv] table:t61a85298 keep order:false, stats:pseudo +drop table if exists t0, t1; +CREATE TABLE t0(c0 int); +CREATE TABLE t1(c0 int); +SELECT t0.c0, t1.c0 FROM t0 NATURAL JOIN t1 WHERE '1' AND (t0.c0 IN (SELECT c0 FROM t0)); +c0 c0 diff --git a/tests/integrationtest/t/planner/core/issuetest/planner_issue.test b/tests/integrationtest/t/planner/core/issuetest/planner_issue.test index cf0bffe8e90f5..00cfa31d3c392 100644 --- a/tests/integrationtest/t/planner/core/issuetest/planner_issue.test +++ b/tests/integrationtest/t/planner/core/issuetest/planner_issue.test @@ -492,3 +492,9 @@ FROM ( ) AS derived_table WHERE 16739493649928310215 MEMBER OF (derived_table.col_60767) OR NOT (JSON_CONTAINS(derived_table.col_60767, '6019730272580550835')); + +# TestIssue53766 +drop table if exists t0, t1; +CREATE TABLE t0(c0 int); +CREATE TABLE t1(c0 int); +SELECT t0.c0, t1.c0 FROM t0 NATURAL JOIN t1 WHERE '1' AND (t0.c0 IN (SELECT c0 FROM t0));