2

アプリケーション機能リストを含む以下の表があります。

アプリケーション機能

Id Name MenuId

値は次のとおりです。

1 PatientSearch2

アプリケーションメニュー

Id DisplayText Url ParentMenuId

値は

1 Patient patient NULL

2 PatientSearch search1

機能とともにメニュー情報を取得する必要があります。これまでのところ、マップされたメニューのみを取得できましたが、親メニュー項目も取得できませんでした。

SELECT
AF.Name, AF.Id As FeatureId, AM.Id AS MenuId, AM.DisplayText,AM.Url
FROM 
ApplicationFeature AF 
INNER JOIN ApplicationMeny AM ON AF.MenuId=AM.Id 

結果には、PatientSearch メニューの詳細のみが表示され、Patient Menu は含まれません。

クエリで親メニューの詳細も取得するにはどうすればよいですか?

編集:

親と一緒にメニューを作成する必要があります。親メニューに別の親がある場合は、そのメニューも含める必要があります。

-- Parent(Id=2)

  --- SubParent(Id=10 & ParentId=2)

    ----ActualMenuMappedwithFeature(Id=30 & ParentId=10)

上記の場合、メニューIDで結果が必要です30, 10, 2

4

2 に答える 2

1

何を得たいのか、言うのは難しいです。ただし、親を1つだけ取得したい場合は、追加の結合を行うことができます

select
    AF.Name, AF.Id As FeatureId,
    AM.Id as MenuId, AM.DisplayText, AM.Url,
    AMP.Id as ParentMenuId, AMP.DisplayText as ParentDisplayText, AM.Url as ParentUrl
from ApplicationFeature as AF
    inner join ApplicationMenu as AM on AM.Id = AF.MenuId
    left outer join ApplicationMenu as AMP on AMP.Id = AM.ParentMenuId

すべての親を一番上に表示したい場合は、希望する出力形式を明確にしてください
EDIT :

declare @FeatureId = ???

;with CTE as (
  select
     AF.Name, AF.Id As FeatureId,
     AM.Id as MenuId, AM.DisplayText, AM.Url,
     AM.ParentId
  from ApplicationFeature as AF
     inner join ApplicationMenu as AM on AM.Id = AF.MenuId
  where AF.Id = @FeatureId

  union all

  select
     null as Name, null as FeatureId,
     AM.Id as MenuId, AM.DisplayText, AM.Url,
     AM.ParentId
  from ApplicationMenu as AM
     inner join CTE as C on C.ParentId = AM.Id
)
select * from CTE
于 2013-08-02T14:05:04.413 に答える