0
我一直在为此工作2天,同时重新学习我知道的有限数量的SQL,但我无法完成这一步。我的SQL技能最多也很弱,不常使用。我知道数据库没有正确规范化,但是我的表格不可能有超过几百个条目,性能是我最担心的问题。如果查询需要5分钟或更长时间才能运行,那么我就不会在乎这点:)。加入一个表格和2个链接器表格
我有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
约翰获得融资明确分配,他allstaff访问是由于他在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的问题有点茫然。我在这一点上学到了很多东西,有人能把我推向终点线吗?
您可以显示表中的样本数据。看起来你缺少一个'LEFT Join'来处理'Null'问题,但是不确定在dups上。 – christiandev
我在一些示例表格数据中编辑过。 – user548369
我终于不得不放弃SQL,并用PowerShell强制它完成项目。如果我不得不重做报告,我可能会在下个月再次用SQL来做这件事 – user548369