我一直在研究这个问题2天,同时重新学习我所知道的有限数量的SQL,但我无法理解这一点。我的SQL技能充其量只是很弱,并且不经常使用。我知道数据库没有正确规范化,但我的表不太可能有几百个条目,性能是我最不关心的问题。如果查询需要5分钟或更长时间才能运行,那么我现在也不在乎:)。
我有3张桌子:
UserTable: GroupTable: ShareTable:
username GroupName ShareName
realname username UserOrGroup
status PermissionLevel
按要求,表格中的数据:
username realname status
jdoe John Doe Active
jAdoe Jane Doe Active
groupname username
usersgroup jdoe
usersgroup jAdoe
admingroup jdoe
admingroup jAdoe
sharename userorgroup permissionlevel
finance jdoe read/write
allstaff usersgroup read/write
admin admingroup read
admin jAdoe read/write
我想要的是查看谁有权访问每个共享,他们当前的状态是什么,以及他们对共享的权限级别。如果该访问权限基于组成员身份,我想查看组名称,否则,我希望该列为NULL。像这样:
Real Name Status ShareName Permission GroupName
John Doe Active Finance Read/Write NULL
John Doe Active AllStaff Read/Write UsersGroup
John Doe Active Admin Read AdminGroup
Jane Doe Active Admin Read/Write NULL
Jane Doe Active Admin Read AdminGroup
Jane Doe Active AllStaff Read/Write UsersGroup
John明确分配了对财务的访问权限,他的所有访问权限都归功于他在UsersGroup中的会员资格......等等。
这让我很接近,但是我得到了一些副本,而没有得到我的空白。
SELECT
u.realName,
u.status,
s.ShareName,
s.Permissionlevel,
ug.GroupName
FROM dbo.usertable AS u
INNER JOIN dbo.Sharestable AS s
ON u.UserName = s.UserOrGroup
INNER JOIN dbo.grouptable as ug
ON u.UserName = ug.UserName
INNER JOIN dbo.Sharestable as s2
ON s2.UserOrGroup = ug.GroupName
ORDER BY u.realName
我不知道从哪里开始。我尝试重新排序左右连接的东西。我想下一步是试验子查询,但我对ATM问题有点不满意。到目前为止,我学到了很多东西,有人能把我推到终点线吗?
答案 0 :(得分:0)
我认为如果您获得重复值,那么在查询中使用 DISTINCT 可能会帮助您避免重复结果..