diff --git a/planner/core/integration_test.go b/planner/core/integration_test.go index 38c4f415321c1..b92d2125a1569 100644 --- a/planner/core/integration_test.go +++ b/planner/core/integration_test.go @@ -1525,6 +1525,19 @@ func (s *testIntegrationSuite) TestIndexMergeHint4CNF(c *C) { } } +func (s *testIntegrationSuite) TestOuterJoinEliminationForIssue18216(c *C) { + tk := testkit.NewTestKit(c, s.store) + tk.MustExec("use test") + tk.MustExec("drop table if exists t1, t2;") + tk.MustExec("create table t1 (a int, c int);") + tk.MustExec("insert into t1 values (1, 1), (1, 2), (2, 3), (2, 4);") + tk.MustExec("create table t2 (a int, c int);") + tk.MustExec("insert into t2 values (1, 1), (1, 2), (2, 3), (2, 4);") + // The output might be unstable. + tk.MustExec("select group_concat(c order by (select group_concat(c order by a) from t2 where a=t1.a)) from t1; ") + tk.MustQuery("select group_concat(c order by (select group_concat(c order by c) from t2 where a=t1.a), c desc) from t1;").Check(testkit.Rows("2,1,4,3")) +} + func (s *testIntegrationSuite) TestInvisibleIndex(c *C) { tk := testkit.NewTestKit(c, s.store) diff --git a/planner/core/rule_join_elimination.go b/planner/core/rule_join_elimination.go index d52653dd8340a..939bdcc17d543 100644 --- a/planner/core/rule_join_elimination.go +++ b/planner/core/rule_join_elimination.go @@ -205,6 +205,9 @@ func (o *outerJoinEliminator) doOptimize(p LogicalPlan, aggCols []*expression.Co for _, expr := range aggDesc.Args { parentCols = append(parentCols, expression.ExtractColumns(expr)...) } + for _, byItem := range aggDesc.OrderByItems { + parentCols = append(parentCols, expression.ExtractColumns(byItem.Expr)...) + } } default: parentCols = append(parentCols[:0], p.Schema().Columns...)