Frage

Angenommen, Sie die folgende Datenbanktabelle haben:

 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

Dies erlaubt die Definition von hierarchischen Namen. Jeder Name kann einen Elternteil Namen hat, und eine beliebige Anzahl von Kindernamen.

Ich wünsche den Datensatz zu finden, um einen qualifizierten Namen entspricht, wie „a: b: c“, wobei Doppelpunkte jeden Namen begrenzen. Ich habe zur Zeit getan, so Joins:

 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

Was ich frage mich, ob es ein effizienter Weg, dies zu tun, die nicht Denormalisierung der Daten beinhalten nicht oder eine harte Abhängigkeit von irgendwelchen besonderen DBMS nehmen.

Danke

War es hilfreich?

Lösung

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top