diff --git a/src/sqlfluff/dialects/dialect_ansi.py b/src/sqlfluff/dialects/dialect_ansi.py
index cea93c05..addb10f1 100644
--- a/src/sqlfluff/dialects/dialect_ansi.py
+++ b/src/sqlfluff/dialects/dialect_ansi.py
@@ -491,8 +491,15 @@ class SelectTargetElementSegment(BaseSegment):
     parse_grammar = OneOf(
         # *
         Ref('StarSegment'),
-        # blah.*
-        Sequence(Ref('SingleIdentifierGrammar'), Ref('DotSegment'), Ref('StarSegment'), code_only=False),
+        # blah.* + blah.blah.*
+        Sequence(
+            Ref('SingleIdentifierGrammar'), Ref('DotSegment'),
+            Sequence(
+                Ref('SingleIdentifierGrammar'), Ref('DotSegment'),
+                optional=True
+            ),
+            Ref('StarSegment'), code_only=False
+        ),
         Sequence(
             OneOf(
                 Ref('LiteralGrammar'),

diff --git a/test/dialects_ansi_test.py b/test/dialects_ansi_test.py
index 91f29dc5..149b5e88 100644
--- a/test/dialects_ansi_test.py
+++ b/test/dialects_ansi_test.py
@@ -81,7 +81,10 @@ def test__dialect__ansi__file_from_raw(raw, res, caplog):
          "CAST(num AS INT64)"),
         # Casting as datatype with arguments
         ("SelectTargetElementSegment",
-         "CAST(num AS numeric(8,4))")
+         "CAST(num AS numeric(8,4))"),
+        # Wildcard field selection
+        ("SelectTargetElementSegment", "a.*"),
+        ("SelectTargetElementSegment", "a.b.*")
     ]
 )
 def test__dialect__ansi_specific_segment_parses(segmentref, raw, caplog):

PRS Error: Found unparsable segment @L001P008: 'a.b.*...'
SQL query to reproduce:
```sql
SELECT a.b.* FROM t
```
test/dialects_ansi_test.py::test__dialect__ansi_specific_segment_parses[SelectTargetElementSegment-a.b.*]
test/dialects_ansi_test.py::test__dialect__ansi__file_from_raw[a test/dialects_ansi_test.py::test__dialect__ansi__file_from_raw[b.c-res1] test/dialects_ansi_test.py::test__dialect__ansi__file_from_raw[abc test/dialects_ansi_test.py::test__dialect__ansi_specific_segment_parses[SelectKeywordSegment-select] test/dialects_ansi_test.py::test__dialect__ansi_specific_segment_parses[NakedIdentifierSegment-online_sales] test/dialects_ansi_test.py::test__dialect__ansi_specific_segment_parses[NumericLiteralSegment-1000.0] test/dialects_ansi_test.py::test__dialect__ansi_specific_segment_parses[ExpressionSegment-online_sales test/dialects_ansi_test.py::test__dialect__ansi_specific_segment_parses[IntervalLiteralSegment-INTERVAL test/dialects_ansi_test.py::test__dialect__ansi_specific_segment_parses[ExpressionSegment-CASE test/dialects_ansi_test.py::test__dialect__ansi_specific_segment_parses[ExpressionSegment-CAST(ROUND(online_sales test/dialects_ansi_test.py::test__dialect__ansi_specific_segment_parses[ExpressionSegment-name test/dialects_ansi_test.py::test__dialect__ansi_specific_segment_parses[SelectTargetElementSegment-MIN test/dialects_ansi_test.py::test__dialect__ansi_specific_segment_parses[ExpressionSegment-DATE_ADD(CURRENT_DATE('America/New_York'), test/dialects_ansi_test.py::test__dialect__ansi_specific_segment_parses[ExpressionSegment-my_array[1]] test/dialects_ansi_test.py::test__dialect__ansi_specific_segment_parses[ExpressionSegment-my_array[OFFSET(1)]] test/dialects_ansi_test.py::test__dialect__ansi_specific_segment_parses[ExpressionSegment-my_array[5:8]] test/dialects_ansi_test.py::test__dialect__ansi_specific_segment_parses[ExpressionSegment-4 test/dialects_ansi_test.py::test__dialect__ansi_specific_segment_parses[ExpressionSegment-bits[OFFSET(0)] test/dialects_ansi_test.py::test__dialect__ansi_specific_segment_parses[SelectTargetElementSegment-(count_18_24 test/dialects_ansi_test.py::test__dialect__ansi_specific_segment_parses[ExpressionSegment-count_18_24 test/dialects_ansi_test.py::test__dialect__ansi_specific_segment_parses[SelectStatementSegment-SELECT test/dialects_ansi_test.py::test__dialect__ansi_specific_segment_parses[SelectTargetElementSegment-CAST(num test/dialects_ansi_test.py::test__dialect__ansi_specific_segment_parses[SelectTargetElementSegment-a.*]