Sql 查找子查询中不存在的用户/记录

Sql 查找子查询中不存在的用户/记录,sql,oracle,Sql,Oracle,我正在编写一个查询,以获取学生注册列表,并创建一个虚拟列,其中包含逻辑,以将具有各种学术计划的学生分配给通信组comm_group。提供给我使用的源代码视图为我们系的任何注册学生的每个学术计划提取一条记录。因此,存在与我们部门无关的注册记录,因为我们部门存在其他注册记录。我可以过滤掉这些行,但我想通过查找comm_group列中所有空值的学生来仔细检查虚拟列中的逻辑。这表明我遗漏了一些计划代码。以下是一些示例数据: 用户ID 平面图编码 通信组 1. EDA 教育行政 1. 中科院 无效的 2.

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

用户ID 平面图编码 通信组 1. EDA 教育行政 1. 中科院 无效的 2. 教育局 电子商务 2. 公共汽车 无效的 3. EDC 无效的 3. 他的 无效的
根据您的需求使用分析计数会更容易:

用同样长的查询 挑选* 从选择*中,countA.COMM\u组由a.user\u id cnt从 其中cnt=0
根据您的需求使用分析计数会更容易:

用同样长的查询 挑选* 从选择*中,countA.COMM\u组由a.user\u id cnt从 其中cnt=0
如果希望用户仅具有空值,则可以使用聚合:

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

如果希望用户仅具有空值,则可以使用聚合:

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

这对我有用。你能在emp表上重现它吗?代码是这样的,但我需要15+个其他列,这就是为什么我尝试使用*。还想知道总体上是否有更好的方法。编辑你的问题并显示你想要的结果。这对我很有用。你能在emp表上重现它吗?代码是这样的,但我需要15+个其他列,这就是为什么我尝试使用*。还想知道是否有更好的方法。编辑你的问题并显示你想要的结果。这个答案解决了这两个问题。1无法从临时表中选择全部,2查找COMM_组只有NULL的用户。此回答解决了这两个问题。1无法从临时表中选择全部,2无法查找COMM_组仅为NULL的用户。我无法使其正常工作,因为COMM_组是一个虚拟列,因此我无法在having子句中使用它。如果我尝试在中的临时表上使用此选项,则无法选择所有列。但它确实以更好的方式得到了与我之前得到的相同的结果。谢谢@查理·巴顿。COMM_GROUP是您在问题中显示的数据中的一列。如果它是在CTE中定义的,则没有问题。对,如果在此之前执行CTE并将其别名为G,但我无法让它使用select G.*选择所有列。我模棱两可地得到了专栏defined@CharliePatton . . . 列在CTE和子查询中需要有唯一的名称。不过,情况似乎是这样。我使用一个尽可能长的查询来执行CTE,其中创建了COMM_组,并尝试使用select*和select A.*跟随它。两者都产生了一个错误。我无法使它工作,因为COMM_GROUP是一个虚拟列,所以我不能在having子句中使用它。如果我尝试在中的临时表上使用此选项,则无法选择所有列。但它确实以更好的方式得到了与我之前得到的相同的结果。谢谢@查理·巴顿。COMM_GROUP是您在问题中显示的数据中的一列。如果它是在CTE中定义的,则没有问题。对,如果在此之前执行CTE并将其别名为G,但我无法让它使用select G.*选择所有列。我模棱两可地得到了专栏defined@CharliePatton . . . 列在CTE和子查询中需要有唯一的名称。不过,情况似乎是这样。我使用一个尽可能长的查询来执行CTE,其中创建了COMM_组,并尝试使用select*和select A.*跟随它。两者都产生了一个错误。