SQL 服务器 CTE 查询重复值

SQL Server CTE query duplicated values

我的table如下:

ID      Name     Parent
1       Joe         -
2       James       -
3       Mike        1
4       Lewis       3
5       Anne        2
6       Lucy        4

输出是预期的,但我的所有值都与此查询重复:

with cte as (
  select name
  from Materials
  where name= 'Joe'
  union all
  select Materials.name
  from cte join
       Materials
       on Materials.parent = cte.id
)
select name, id
from cte;

输出:

Joe
Joe
Mike
Lewis
Lucy
Mike
Lewis
Lucy

知道哪里出了问题吗?

您的样本数据不重复。看到这个 demo.

一个简单的解决方案是使用 select distinct:

with cte as (
      select m.name
      from Materials m
      where m.name = 'Joe'
      union all
      select m.name
      from cte join
           Materials m
           on Materials.parent = cte.id
    )
select distinct name
from cte;