diff --git a/src/Interpreters/TreeRewriter.cpp b/src/Interpreters/TreeRewriter.cpp index c7447356bb07..2a34a49fb821 100644 --- a/src/Interpreters/TreeRewriter.cpp +++ b/src/Interpreters/TreeRewriter.cpp @@ -1353,7 +1353,14 @@ TreeRewriterResultPtr TreeRewriter::analyzeSelect( result.analyzed_join = std::make_shared(); if (remove_duplicates) + { + Aliases aliases; + NameSet name_set; + + normalize(query, aliases, name_set, select_options.ignore_alias, settings, /* allow_self_aliases = */ true, getContext(), select_options.is_create_parameterized_view); renameDuplicatedColumns(select_query); + } + /// Perform it before analyzing JOINs, because it may change number of columns with names unique and break some logic inside JOINs if (settings[Setting::optimize_normalize_count_variants]) diff --git a/tests/queries/0_stateless/03903_join_alias_dups.reference b/tests/queries/0_stateless/03903_join_alias_dups.reference new file mode 100644 index 000000000000..30ea790176ca --- /dev/null +++ b/tests/queries/0_stateless/03903_join_alias_dups.reference @@ -0,0 +1,4 @@ +42 +1 g +42 +1 g diff --git a/tests/queries/0_stateless/03903_join_alias_dups.sql.j2 b/tests/queries/0_stateless/03903_join_alias_dups.sql.j2 new file mode 100644 index 000000000000..71aad85c3d14 --- /dev/null +++ b/tests/queries/0_stateless/03903_join_alias_dups.sql.j2 @@ -0,0 +1,32 @@ +{% for enable_analyzer in [0, 1] -%} + +SET enable_analyzer = {{ enable_analyzer }}; +SET join_algorithm = 'hash'; + +SELECT A.g +FROM ( SELECT 1::Int8 AS d ) AS B +JOIN ( SELECT 1::Int8 as d, g, 42::Int32 AS g FROM ( SELECT '128' AS g ) ) AS A +USING (d); + +WITH B AS ( +SELECT + 1 AS d + ), + A AS ( +SELECT + g, d, + MAX(IF(m = 'A', g, NULL)) AS g +FROM + ( + SELECT + 'g' AS g, 1 d, + 'A' m + ) +GROUP BY ALL ) +SELECT + B.*, + A.g +FROM + B +LEFT JOIN A USING d; +{% endfor -%}