小编典典

BigQuery SQL排除不在空结果中

sql

我在不返回任何值时遇到问题。数据库中有符合此条件的帐户。有些困惑为什么他们不被退回。有什么建议?

select accountid from `table1` 
where not in (select accountid from `table1` where action != "Action8")

阅读 153

收藏
2021-04-14

共1个答案

小编典典

不要使用not in。从语义上讲,这是违反直觉的。如果子查询中的 任何 值为NULL,则不返回任何行。

使用not exists代替;

select t1.accountid
from `table1` t1
where not exists (select 1
                  from table1 tt1
                  where tt1.accountid  = t1.accountid and
                        tt1.action <> 'Action8'
                 );

或使用group byhaving

select t1.accountid
from table1 t1
group by t1.accountid
having sum(case when action = 'Action8' then 1 else 0 end) = 0;
2021-04-14