如何在雪花中编写相关子查询

Posted

技术标签:

【中文标题】如何在雪花中编写相关子查询【英文标题】:how to write a correlated subquery in snowflake 【发布时间】:2019-01-04 03:06:14 【问题描述】:

你能帮我在雪花中写一个相关的子查询吗?

select a
       b,
       (select d.x from d inner join b on d.id=b.id) As x,
       (select d.x from d inner join bon d.id!=b.id) AS Y  
FROM a 
inner join b on a.id=b.id

根据连接条件从 d 表中选择 X。根据另一个连接条件从同一个表中选择另一列 上面的查询几乎是我原来的场景。你能帮我在雪花中写一个相同的查询吗

【问题讨论】:

请提供示例数据集和您期望的查询结果。但请注意,在SELECT 列表中,您只能拥有每个返回 EXACTLY ONE ROW 的子查询。我猜你的查询不是这种情况。您还可以考虑像SELECT d.x FROM d WHERE d.id=b.id 这样的子查询,这可能会有所帮助。但我不明白这对=!= 是如何起作用的。 好的,谢谢@MarcinZukowski 让我试试 【参考方案1】:

关联子查询通常不是一个好主意,因为在许多情况下,它们会导致每行一个查询,而无法扩展。 如果我正确阅读了您的查询,您可以简单地使用不同的连接条件加入 d 两次以获得 xy

select
    a.*,
    b.*,
    d1.x as x,
    d2.x as y
from
    a
    join
    b on a.id = b.id
    join
    d as d1 on d.id = b.id
    join
    d as d2 on d.id <> b.id

【讨论】:

这应该被标记为答案。一年后,SELECT 子句不支持相关子查询 - docs.snowflake.com/en/user-guide/…

以上是关于如何在雪花中编写相关子查询的主要内容,如果未能解决你的问题,请参考以下文章

使用子查询更新在雪花中不起作用

雪花:无法评估不受支持的子查询类型

替换雪花中的子查询

雪花中不支持的子查询

雪花不支持的子查询类型无法在 UDF 标量中评估

雪花标量 UDF 返回 无法评估不支持的子查询类型