Oracle SQL:基于行的不同结果列表没有列值

Oracle SQL: Distinct list of results based row not having column value

我正在尝试根据列值限制我的行,但很难获得正确的语法。

鉴于:

create table acctprefs (acctid char(5),
                        prefcode char(3));

insert into acctprefs values ('10000', 'ABC');
insert into acctprefs values ('10000', 'DEF');
insert into acctprefs values ('10000', 'GHI');

insert into acctprefs values ('10001', 'ABC');
insert into acctprefs values ('10001', 'DEF');
insert into acctprefs values ('10001', 'GHI');
insert into acctprefs values ('10001', 'ZZZ');

我想要 return 没有 'ZZZ' 首选项的不同帐户列表。在这种情况下,我试图得到一个简单的结果:

10000

我可以通过下面的查询获得 'ZZZ' 的不同帐户,但我只需要相反的。

select *
from 
  acctprefs ap
where
  ap.prefcode in 
    (select ap.prefcode from acctprefs ap group by ap.prefcode having(ap.prefcode = 'ZZZ'));

一种方法是使用 having 子句进行聚合:

select ap.acctid
from acctprefs ap
group by ap.acctid
having sum(case when ap.prefcode = 'ZZZ' then 1 else 0 end) = 0;

having子句计算每个账户的ZZZ数量。 . .和 returns 只有那些零。

一种方法是使用 minus.

select acctid
from acctprefs 
where arefcode <> 'ZZZ'
minus
select acctid
from acctprefs 
where arefcode = 'ZZZ'

获取不具有该值的所有内容 - select 具有该值的所有内容并减去它。

Select distinct acctid
from acctprefs
where acctid NOT IN (select acctid 
                       from acctprefs
                       where prefcode = 'ZZZ')

祝你好运