SQL Server CTE запрашивает дублированные значения - PullRequest
0 голосов
/ 11 февраля 2020

Моя таблица выглядит следующим образом:

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

Есть идеи о том, что может быть не так?

1 Ответ

2 голосов
/ 11 февраля 2020

Ваш образец данных не дублирует продукт. Посмотрите это демо .

Простое решение заключается в использовании 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;
...