数据库与三个表连接,一个是类别/标记表

时间:2010-07-16 15:19:23

标签: sql join tags

我有三个数据库表 - 一个包含单位,一个包含这些单位的类别,另一个包含用户权限。

如果用户可以访问某个类别,则可以访问该类别中的任何单位。

我正在尝试创建一个查询,该查询将检索允许访问的单元列表。到目前为止,我有一个非常尴尬的查询,返回重复,有点卡住,这是星期五下午,我想回家!

以下是我的表格:

UnitCategory

categoryid     unitid

单元

id             name

UnitCategoryUser

unitid         userid         categoryid
               - can be null  - can be null

由于

3 个答案:

答案 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”

那样的东西?