首页 > 解决方案 > 查找子查询中不存在的用户/记录

问题描述

我正在编写一个查询来提取学生注册列表,并创建一个具有逻辑的虚拟列,以将具有各种学术计划的学生分配到交流组 ( comm_group)。我提供给我的源视图为在我们部门注册的学生的每个学术计划提供了一个记录。结果,存在与我们部门无关的招生记录,因为我们部门存在其他招生。我可以过滤掉这些行,但我想通过查找列中具有所有空值的任何学生来仔细检查我的虚拟列中的逻辑comm_group。这表明我在某处错过了一些计划代码。以下是一些示例数据:

用户身份 计划代码 COMM_GROUP
1 EDA 教育行政
1 中国科学院 空值
2 教育局 教育业务
2 公共汽车 空值
3 电子数据中心 空值
3 他的 空值

用户3在 中注册EDC,因此该行的该列应该有一个值COMM_GROUPEDC这意味着我在我case的虚拟专栏中的陈述中遗漏了。我想通过选择查找所有只有NULL值的用户来识别所有此类错误。

我快到了,但我错过了一些东西。我的代码现在看起来像这样:

WITH A AS (long query)
SELECT A.USER_ID
FROM A
WHERE A.USER_ID NOT IN (SELECT A.USER_ID FROM A WHERE A.COMM_GROUP IS NOT NULL)

这给了我用户 ID,但实际上我需要整行,但我不想从with语句中枚举列。我试过SELECT A.*了,但我得到了一个column is ambiguously defined错误。

有没有办法从中选择所有列A?我也愿意接受其他解决问题的方法。

标签: sqloracle

解决方案


如果您希望用户只有NULL值,您可以使用聚合:

select user_id
from g
group by user_id
having max(COMM_GROUP) is null;

推荐阅读