我有一个表,其中包含一些ID和一个是否应该删除此人的标志.表中有2组ID,1个主ID,然后还有一个辅助ID.如果一个主ID具有多个辅助ID,则该ID可以在表中多次出现.

以这组数据为例:

primary_id       secondary_id      delete_flag
   1                 ajdkl              1
   1                 jnami              0
   2                 janda              0
   3                 wwqia              1
   4                 lamse              1
   4                 pppqw              1
   4                 aneqw              0
   5                 gaabs              1
   5                 iikam              1

在该示例中,我希望返回3和5,因为它们是主ID的所有实例都具有DELETED_FLAG=1的唯一2个实例.

我在此查询中遇到的内容:

select primary_id from table where delete_flag = 1 group by primary_id 

它返回至少存在一个1的所有实例,我只想要每个实例都有1存在的实例.

推荐答案

您需要使用GROUP BYHAVING子句,其中应 Select 记录总数等于已删除标志记录总数的primary_id.

select primary_id 
from mytable 
group by primary_id 
having count(delete_flag) = count(case when delete_flag = 1 then 1 end)

另一种 Select 是使用MIN()MAX(),其中DELETED_FLAG的最小和最大值都应该等于1.

select primary_id 
from mytable 
group by primary_id 
having min(delete_flag) = 1 and max(delete_flag) = 1

Demo here

Sql相关问答推荐

按postquist中的日期查询json列

帮助修复查询以识别SQL DW中数据中的递归关系

仅 for each 唯一ID返回一个元素,并仅返回最新连接的记录

SQL -滞后于上一个非重复值

Access中执行INSERT INTO查询时出现错误消息

如何在PostgreSQL中的一列中添加两个文本?

如何隐藏聚合JSON数组元素的键

使用列表作为参数进行 Select ,如果为空,则在PostgreSQL中不使用参数进行 Select

两个不同星期的销售额,不加成一行

使用SQL数据库中的现有列派生或修改几个列

根据时间、状态和相关行在PostgreSQL中的存在来删除行

YEAR 函数仍然不可SARGable 吗?

计算不同模式的时间跨度

DbUp for sqlserver 在 dbo 授权下为非 dbo 用户创建架构

Postgres,使用 select 插入多个值

获取上个月和上一年的值

基于 Snowflake 的最大值创建新列

如何根据与 BigQuery 中另一个表的匹配更新一个表中的列?

如何仅在满足条件时才按顺序在 SQL 中计数?

如何更改 duckdb R 中的数据约束