SQL:试图找到仅在一个领域具有唯一值的个体

SQL: Trying to find individuals with a unique value only in one field

如果这个 SQL 问题看起来很简单,我深表歉意,但我一直在努力解决这个问题,并尝试在网上搜索无果。

我有一个 table(名为 AUDIT),其中有我公司大约 1,000 个唯一用户。 table 列出了他们在我们的系统中可以访问的数据区域(在字段名称“区域”下)。

每个人都可以访问一个名为“General”的“区域”,这允许他们登录。然后会有其他“区域”告诉我们他们可以访问哪些数据,例如 Person、Payroll、Finance 、系统等。在每个“区域”中,人们都有“角色”来指定对他们拥有的数据的访问级别。

我们实际上总共有 12 个“区域”。对于某人有权访问的每个“区域”,他们将在 table 中有一个单独的行。例如,如果您有权访问“Ge​​neral”、“Systems”和“Human Resources”,那么您将在 table 中有 3 行。每个用户都有一个唯一的 ID 号(恰当地命名为“ID”)。

我想做的是找到只能访问“常规”的人。如果我只是将我的查询限制为列出拥有“一般”的人,那么每个人都会出现。

我知道如何查询 table ROLES 并将其限制为“一般”的“区域”,但我不清楚我如何获得只有“一般”而没有其他内容的 ID .我也尝试过对“区域”字段进行计数,以显示在该字段中具有一个不同值的 ID,但我也没有弄清楚。

我的 SQL 已经生疏了,因为我多年来一直使用一个不错的 GUI,但它对我没有帮助。感谢任何帮助!

你可以像这样使用子查询 select * 来自 Table 其中 Access='General' 和 ID NOT In ( Select ID from Table where Access Not Equal 'General')

或者 您可以在具有 count == 1

的唯一 ID 上使用 group by 语句

这是一个通用模板..

select user_name, max(role) --optional
from t
group by user_name
having max(area)=min(area) and min(area)='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)