diff --git a/src/sqlfluff/rules/L025.py b/src/sqlfluff/rules/L025.py index 128a6e8e542..54a2cb1c56c 100644 --- a/src/sqlfluff/rules/L025.py +++ b/src/sqlfluff/rules/L025.py @@ -121,7 +121,9 @@ def is_alias_required( dialect_name in cls._dialects_requiring_alias_for_values_clause ) elif any( - seg.is_type("select_statement") + seg.is_type( + "select_statement", "set_expression", "with_compound_statement" + ) for seg in segment.iter_segments(expanding=("bracketed",)) ): # The FROM expression is a derived table, i.e. a nested diff --git a/test/fixtures/rules/std_rule_cases/L025.yml b/test/fixtures/rules/std_rule_cases/L025.yml index 8b1290956f2..4454e4d0080 100644 --- a/test/fixtures/rules/std_rule_cases/L025.yml +++ b/test/fixtures/rules/std_rule_cases/L025.yml @@ -312,8 +312,28 @@ test_fail_snowflake_flatten_function: core: dialect: snowflake -test_pass_derived_query_requires_alias: +test_pass_derived_query_requires_alias_1: + # Case 1: Simple derived query pass_str: | SELECT * FROM ( SELECT 1 ) as a + +test_pass_derived_query_requires_alias_2: + # Case 2: Derived query uses set operation (UNION) + pass_str: | + SELECT * FROM ( + SELECT col FROM dbo.tab + UNION + SELECT -1 AS col + ) AS a + +test_pass_derived_query_requires_alias_3: + # Case 3: Derived query includes a WITH statement + pass_str: | + SELECT * FROM ( + WITH foo AS ( + SELECT col FROM dbo.tab + ) + SELECT * FROM foo + ) AS a