如果這個 SQL 問題看起來很簡單,我深表歉意,但我一直在努力解決它并嘗試在網上搜索無濟于事。
我有一個表(名為 AUDIT),其中包含我公司中大約 1,000 個唯一用戶。此表列出了他們在我們的系統中可以訪問的資料區域(在欄位名稱“區域”下)。
每個人都可以訪問一個名為“General”的“區域”,這允許他們登錄。然后會有其他“區域”來通知我們他們可以訪問哪些資料,例如人員、薪資、財務、系統等。在每個“區域”內,人們然后擁有“角色”來指定對他們擁有的資料的訪問級別。
我們實際上總共有 12 個“區域”。對于某人有權訪問的每個“區域”,他們將在表中擁有單獨的行。例如,如果您有權訪問“Ge??neral”、“Systems”和“Human Resources”,那么表格中將有 3 行。每個用戶都有一個唯一的 ID 號(適當命名為“ID”)。
我想要做的是找到只能訪問“Ge??neral”的人。如果我只是將我的查詢限制為列出擁有“General”的人,那么每個人都會出現。
我知道如何查詢表 ROLES 并將其限制為“常規”的“區域”,但我不清楚如何獲得只有“常規”而沒有其他內容的 ID。我還嘗試在“區域”欄位上進行計數,以向我顯示在該欄位中具有一個不同值的 ID,但也沒有弄清楚這一點。
我的 SQL 生銹了,因為我多年來一直在使用一個不錯的 GUI,但它在這里對我沒有幫助。任何幫助表示贊賞!
uj5u.com熱心網友回復:
如果默認情況下每個人都擁有“General”,那么您應該可以執行以下操作
Select UserId
From Audit
group by UserId
having count(*)=1
或者如果不是這樣的
Select UserId
From Audit
where Area='General'
group by UserId
having min(area)=max(area)
uj5u.com熱心網友回復:
您可以使用子查詢,例如 select * from Table where Access='General' AND ID NOT In( Select ID from Table where Access Not Equal 'General')
或者,您可以在 count == 1 的唯一 ID 上使用 group by 陳述句
uj5u.com熱心網友回復:
這是一個通用模板..
select user_name, max(role) --optional
from t
group by user_name
having max(area)=min(area) and min(area)='General';
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/363121.html
上一篇:如何獲得最大狀態作為列?
