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

时间:2017-01-05 21:56:30

标签: sql select hive

我在SQL方面遇到了困难。我没有帐户和计划。我想知道所有没有参加特定计划的人。

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

我需要那些没有参加planA的人。我目前的疑问是:

select * from table where plans <> 'planA'

但由于该行有planB,我也得到了acct 1。我需要acct 3,4作为输出。

3 个答案:

答案 0 :(得分:0)

尝试

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

答案 1 :(得分:0)

显而易见的解决方案是使用自联接。加入是昂贵的操作。您可以尝试不同的方法。

{{1}}

通过上述声明,您实际上是在计算客户订购planA的次数。 {{1}}子句仅筛选零planA订阅的结果。

答案 2 :(得分:0)

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

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;