sql - 在 dba_users 中查找记录而不是在单个用户表中
问题描述
我在 Oracle 11g 中有以下问题:
我有一个表 TBL_PERSON 列出了我的应用程序的所有用户,我需要找出 TBL_PERSON 中未提及的所有数据库用户。
tbl_person 的计数是 4207。
dba_users/all_users 的计数是 4244。这意味着,37 个用户的差异是不使用应用程序的系统用户。
到目前为止,一切都很好。如何识别系统用户?
表 INT_PERSON 中的 ID 等于 dba_users 中的 USER_ID。我期望 dba_users 表中未在 INT_PERSON 中列出的所有用户的列表。(37 行)
我尝试了以下方法:
SELECT *
FROM dba_users
WHERE USER_ID
NOT
IN (SELECT ID
FROM LCM.TBL_INT_PERSON);
结果是 3804 行,还显示来自 INT_PERSON 的用户 -> 不是我所期望的
然后尝试:
SELECT *
FROM dba_users a
WHERE USER_ID
NOT
IN (SELECT ID
FROM LCM.TBL_INT_PERSON b
where b.id = a.User_id);
这没什么区别。
这些帖子不能解决我的问题:
或者它是 dba_users 表的秘密?我的错误在哪里?
解决方案
如何识别系统用户?
首先验证应用程序用户的数量。此查询应返回应用程序用户的所有 ID,即 4207 如果不是 - 您有其他问题,而不是您描述的问题。
select USER_ID from dba_users
INTERSECT
select ID from TBL_INT_PERSON;
现在显示系统用户
select USER_ID from dba_users
MINUS
select ID from TBL_INT_PERSON;
这应该返回系统用户的 ID。
一般说明 -count(*)
两个表的简单减法可能会产生误导,因为表中可能存在重复的键和空值。使用上述设置操作更安全。
推荐阅读
- amazon-web-services - 使用安全组限制 AWS EC2 出站流量
- java - 提供外部 Tomcat 时的 Spring Boot REST Web 服务端点
- mysql - 返回无重复的mysql行
- r - 使用 R 和 httr 发布表单
- c++ - 动态创建指针数组时,Visual Studio 不显示完整数组
- c#-4.0 - 我想阅读带有图像、文本和表格的 PDF 内容
- android - 将从图像选择器中选择的图像添加到回收器视图、Android Studio、Kotlin
- angular - Angular rxjs 混合了 observable 和 promise
- python - queryset,union,order_by 在带注释的字段上
- r - 当列中没有值的整数数量低于阈值时,如何删除因子的所有条目?