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