我在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作为输出。
答案 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;