そのタイトルはあまりよくないので、次の点を考慮してください。私は5つのテーブルがあります。TSQL - 複数の結合パスを持つテーブルから選択
をそして私はそれに直接または間接的にプロファイルを介してリンクされているユーザーのアクセス許可のすべてを取得します。ない-かなり-そこに私がこれまでに作ってみたSQLはこれです:
SELECT [Pe].[Controller],
[Pe].[Action]
FROM [PermissionSets] AS [PS]
JOIN [UserPermissionSets] AS [UPS]
ON ([UPS].[PermissionSetId] = [PS].[Id])
JOIN [Users] AS [U]
ON ([U].[Id] = [UPS].[UserId])
JOIN [Profiles] AS [P]
ON ([P].[Id] = [U].[ProfileId])
JOIN [ProfilePermissionSets] AS [PPS]
ON ([PPS].[ProfileId] = [P].[Id])
JOIN [Permissions] AS [Pe]
ON ([Pe].[PermissionSetId] = [PS].[Id])
WHERE [U].[Id] = 4;
それは、行の正しい数を戻るが、それは間違っているので、それは、何度も、コントローラやアクションを繰り返しています。私は、誰かがそれを修正して、そのユーザーのためのすべての異なるアクセス権セットを表示するのを助けることを願っています。理想的には、私はこれを変更して、ユーザーから始まるすべてが発見されるようにしたいのですが、これは私がこれを行うために必要なメソッドにアクセスできるものです(オブジェクトはUser
という名前のEntity Frameworkクラスであり、 LINQ)。私は本当には権限ない権限セットを望んでいたことを忘れてしまったので
はを更新しました。
あなたは 'GROUP BY'を探していますか? – ZLK
わかりません、私は自分自身のために問題を引き起こすのに十分なSQLを知っています。 – Gup3rSuR4c
ユーザは常に_UserPermissionSets_テーブルに少なくとも1つのエントリを持っていますか?そうでない場合は、_UserPermissionSets_または_UserPermissionSets_および_Permissions_にエントリを持つユーザーのみを取得します。その後、LEFT OUTER JOINを使用してください。 – schlonzo