我有三个数据库表 - 一个包含单位,一个包含这些单位的类别,另一个包含用户权限。
如果用户可以访问某个类别,则可以访问该类别中的任何单位。
我正在尝试创建一个查询,该查询将检索允许访问的单元列表。到目前为止,我有一个非常尴尬的查询,返回重复,有点卡住,这是星期五下午,我想回家!
以下是我的表格:
UnitCategory
categoryid unitid
单元
id name
UnitCategoryUser
unitid userid categoryid
- can be null - can be null
由于
答案 0 :(得分:1)
SELECT U.Name
FROM UnitCategoryUser UCU
JOIN UnitCategory UC ON UC.categoryid = UCU.categoryid
JOIN Unit U ON U.id = UC.UnitId
WHERE UCU.UserId = YourUserId
这不会返回正确的数据吗?我可能会遗漏一些东西:x
答案 1 :(得分:1)
我怀疑UnitCategoryUser被用作用户,类别和单位之间关系的全能表 - 因此单位被记录为属于userid为null的记录上的类别,并且即使用户也可以访问单位他们无权访问categoryid为null的类别。
单位也可能属于多个类别,并且用户可以记录为能够多次访问相同单位 - 用户可以访问多个类别(每个类别都可以访问同一个单位) )并且用户被授予访问权限而无权访问该类别的单位,然后被授予访问该类别的权限。
以下查询应返回指定用户的所有单位:
select distinct u.name
from unit u
join unitcategory uc on u.id = uc.unitid
join unitcategoryuser ucu on uc.category_id = ucu.categoryid
where ucu.userid = YourUserID
union
select distinct u2.name
from unit u2
join unitcategoryuser ucu2 on u2.id = ucu2.unitid
where ucu2.userid = YourUserID
答案 2 :(得分:0)
从unit,unitcategory,unitcategoryuser中选择unit.name 其中unit.id = unitcategory.unitid和unitcategory.categoryid = unitcategoryuser.categoryid和unitcategoryuser.userid =“Me”
那样的东西?