sql—选择任何记录中不包含特定值的记录

uz75evzq  于 2021-06-28  发布在  Hive
关注(0)|答案(3)|浏览(400)

我在sql方面遇到了困难。我没有帐号和计划。我想知道所有没有参加某个计划的人。

acct  plans  
1     planA  
1     planB  
2     planA  
3     planC  
4     planD

我需要的人谁没有登记在计划。我当前的查询是:

select * from table where plans <> 'planA'

但我也得到了科目1,因为这一行有计划B。我只需要帐户3,4作为输出。

ivqmmu1c

ivqmmu1c1#

只是另一个可能的查询,它构建了计划列表,成员被订阅并检查计划是否不在该列表中-

with temptable as 
( 
  select acct,collect_list(plans) as plan_list
  from plantable
  group by acct
)
select * from temptable  
where array_contains(plan_list,'planA') = false;
tez616oj

tez616oj2#

尝试

select * from accplans a
where a.acct not in
  (select a2.acct from accplans a2 where a2.plans = 'planA')
7rtdyuoh

7rtdyuoh3#

显而易见的解决方案是使用自连接。连接是代价高昂的操作。你可以尝试另一种方法。

SELECT acct, 
       SUM(CASE WHEN plans='planA' THEN 1 ELSE 0 END) AS hasPlanA
  FROM tbl
 GROUP BY acct
HAVING hasPlanA = 0

通过上面的陈述,您实际上是在计算一个客户订阅plana的次数。这个 HAVING 子句只过滤plana订阅为零的结果。

相关问题