Question

En supposant que vous avez la table de base de données suivante:

 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

Cela permet la définition des noms hiérarchiques. Chaque nom peut avoir un nom de parent, et un certain nombre de noms d'enfants.

Je souhaite trouver l'enregistrement correspondant à un nom qualifié comme « a: b: c », où chaque nom côlons délimitent. Je l'ai fait actuellement avec des jointures:

 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

Ce que je me demande est de savoir s'il y a une façon de faire qui n'implique pas plus efficace dénormalisation des données ou de prendre une dépendance difficile sur un SGBD particulier.

Merci

Était-ce utile?

La solution

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top