سؤال

على افتراض أن لديك جدول قاعدة البيانات التالي:

 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"، حيث تقوم Colons Delimit بكل اسم. لقد فعلت ذلك حاليا باستخدام 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

ما أتساءله هو ما إذا كانت هناك طريقة أكثر فعالية للقيام بذلك لا تنطوي على تنشرا للبيانات أو أخذ تبعية صلبة على أي مواد DBMS معينة.

شكرا

هل كانت مفيدة؟

المحلول

قد ترغب في قراءة هذا: http://www.developersdex.com/gurus/articles/112.asp.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top