Эффективный запрос отношений между родителями и детьми

StackOverflow https://stackoverflow.com/questions/1715624

  •  19-09-2019
  •  | 
  •  

Вопрос

Предположим, у вас есть следующая таблица базы данных:

 create table Names (
  Id INT IDENTITY NOT NULL,
    Name NVARCHAR(100) not null,
    ParentNameId INT null,
    primary key (Id)
 )

 create index IX_Name on Names (Name)

 alter table Names
  add constraint FK_NameNames
  foreign key (ParentNameId) 
  references Names

Это позволяет определять иерархические имена.Каждое имя может иметь одно родительское имя и любое количество дочерних имен.

Я хочу найти запись, соответствующую полному имени, например «a:b:c», где каждое имя разделяется двоеточиями.В настоящее время я сделал это, используя соединения:

 select
  Id
 from
  Names names0
  inner join Names names1 on names0.ParentNameId = names1.Id
  inner join Names names2 on names1.ParentNameId = names2.Id
 where
  names0.Name = 'a' and
  names1.Name = 'b' and
  names2.Name = 'c' and
  names0.ParentNameId is null

Мне интересно, есть ли более эффективный способ сделать это, не требующий денормализации данных или жесткой зависимости от какой-либо конкретной СУБД.

Спасибо

Это было полезно?

Решение

Возможно, вам будет интересно прочитать это: http://www.developersdex.com/gurus/articles/112.asp

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top