雪花,SQL where 子句

Posted

技术标签:

【中文标题】雪花,SQL where 子句【英文标题】:Snowflake, SQL where clause 【发布时间】:2021-04-05 12:09:37 【问题描述】:

我需要用 where 子句编写查询:

where       
    pl.ods_site_id in (select id from table1 where ...)

但是如果子查询 (table1) 没有返回任何内容,那么 where 子句不需要包含在结果查询中(就像它返回 TRUE 一样)。

我该怎么做? (我有雪花 SQL 方言)

【问题讨论】:

【参考方案1】:

您可以包含第二个条件:

where pl.ods_site_id in (select id from table1 where ...) or
      not exists (select id from table1 where ...)

这会显式检查不返回任何行的子查询。

【讨论】:

【参考方案2】:

如果您愿意改用join,Snowflake 支持qualify 子句,这可能会派上用场。你可以在 Snowflake 上运行它来看看它是如何工作的。

with 
pl (ods_site_id) as  (select 1 union all select 5),

table1 (id) as (select 5) --change this to 7 to test if it returns ALL on no match

select a.*
from pl a
left join table1 b on a.ods_site_id = b.id -- and other conditions you want to add
qualify b.id = a.ods_site_id --either match the join condition
        or count(b.id) over () = 0; --or make sure there is 0 match from table1

【讨论】:

以上是关于雪花,SQL where 子句的主要内容,如果未能解决你的问题,请参考以下文章

雪花变种性能

从雪花中的 Postgres 复制 FILTER 子句

如何获取雪花交易中使用的所有查询?

在 python 中执行雪花 SQL 语句时出现雪花 python 错误

运行递归查询时如何打破雪花中的循环

雪花存储过程 - 多个多行 SQL 命令