Pergunta

Supondo que você tenha o banco de dados tabela seguinte:

 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

Isto permite a definição de nomes hierárquicos. Cada nome pode ter um nome do pai, e qualquer número de nomes de crianças.

Eu gostaria de encontrar o registro que corresponde a um nome qualificado como "a: b: c", onde dois pontos delimitar cada nome. Eu tenho atualmente feito usando junta-se:

 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

O que eu estou querendo saber é se existe uma maneira mais eficiente de fazer isso que não envolve desnormalização dos dados ou tomar uma dependência duro em qualquer DBMS particulares.

Graças

Foi útil?

Solução

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top