次のような状況があり、どのように対処すればよいかわかりません。必要なビューを準備する方法についてのガイダンスをいただければ幸いです。
4 つのテーブルがあります:
ユーザー (userid int、username varchar)
ロール (roleid int、rolename varchar)
businessunit (buid int、buname varchar)
user_role_map (userid、roleid、buid)
ロール テーブルには、「システム管理者」ロールである ID が 0 のロールがあり、ビジネス ユニット テーブルには IT ビジネス ユニットがあります。以下のクエリの結果として得られるユーザーは、システム管理者と見なされ、すべてのビジネス ユニットへのフル アクセス権を持つ必要があります。
SELECT userid FROM user_role_map WHERE roleid = 0 AND buid = 0
すべての「非システム管理者」をすべてのビジネス ユニットとすべての「システム管理者」ユーザーのリストに結合して表示するビューを作成する必要があります。最初の部分は以下のクエリで簡単ですが、2 番目の部分は私が苦労しているものです。
SELECT userid, roleid, buid FROM user_role_map WHERE roleid > 0 AND buid > 0
私が達成しようとしていることを説明するのに役立つサンプルデータをいくつか示します。
users
---------------
1, "sysAdmin"
2, "salesUser1"
3, "serviceUser1"
4, "manager1"
5, "salesUser2"
6, "serviceUser2"
7, "manager2"
roles
---------------
0, "SystemAdmin"
1, "Full"
2, "Update"
3, "Read"
ビジネスユニット --------------- 0、「IT」1、「fooSales」2、「fooService」3、「barSales」4、「barService」
user_role_map
---------------
1, 0, 0
2, 1, 1
2, 3, 3
3, 1, 2
3, 3, 4
4, 1, 1
4, 1, 2
5, 1, 3
5, 3, 1
6, 1, 4
6, 3, 3
7, 1, 2
7, 1, 4
最後に、上記のサンプル データに対して以下を提供するビューが必要です (最後の 4 行に注意してください)。
new view
---------------
2, 1, 1
2, 3, 3
3, 1, 2
3, 3, 4
4, 1, 1
4, 1, 2
5, 1, 3
5, 3, 1
6, 1, 4
6, 3, 3
7, 1, 2
7, 1, 4
1, 1, 1
1, 1, 2
1, 1, 3
1, 1, 4
注: この例のデータには「システム管理者」ユーザーが 1 人しかいませんが、このタイプのユーザーは何人でも存在する可能性があります。