sql - 查找子查询中不存在的用户/记录
问题描述
我正在编写一个查询来提取学生注册列表,并创建一个具有逻辑的虚拟列,以将具有各种学术计划的学生分配到交流组 ( comm_group
)。我提供给我的源视图为在我们部门注册的学生的每个学术计划提供了一个记录。结果,存在与我们部门无关的招生记录,因为我们部门存在其他招生。我可以过滤掉这些行,但我想通过查找列中具有所有空值的任何学生来仔细检查我的虚拟列中的逻辑comm_group
。这表明我在某处错过了一些计划代码。以下是一些示例数据:
用户身份 | 计划代码 | COMM_GROUP |
---|---|---|
1 | EDA | 教育行政 |
1 | 中国科学院 | 空值 |
2 | 教育局 | 教育业务 |
2 | 公共汽车 | 空值 |
3 | 电子数据中心 | 空值 |
3 | 他的 | 空值 |
用户3
在 中注册EDC
,因此该行的该列应该有一个值COMM_GROUP
。EDC
这意味着我在我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
?我也愿意接受其他解决问题的方法。
解决方案
如果您希望用户只有NULL
值,您可以使用聚合:
select user_id
from g
group by user_id
having max(COMM_GROUP) is null;
推荐阅读
- graph - 在graph api中,使用authorization_code获取access_token,但不返回refresh_token的过期,如何获取refresh_token过期
- nginx - Presto Coordinator 不支持 High Availabiltiy
- python - VSCode 集成终端未通过正确设置启动
- c++ - 如何实例化一个类的静态成员方法模板?
- ios - Firebase crashlytics 未在 iOS 中初始化
- p2p - Does p2p(peer to peer) die? or just not being used? and can servive?
- c# - 单元测试 - 模拟 ILogger 返回 null
- javascript - 当浏览器选项卡没有焦点时使用 Websocket 进行角冻结
- grails - 如何在登录 URL 之前配置 Grails Spring Security SAML 插件
- .net - AJAX 调用 - 切换到 HTTPS 后找不到 404