无法评估不支持的子查询类型

问题描述 投票:0回答:3

在执行以下语句后,我在雪花中遇到错误,提示“无法评估不支持的子查询类型”。应该如何写这个语句才能避免这个错误?

选择A
从 ( 选择b ,c 来自测试表 );

subquery snowflake-cloud-data-platform
3个回答
0
投票

外部查询列列表需要位于子查询的列列表内。示例:select b from (select b,c from test_table);


0
投票

忽略您显示的查询的“列”将永远不会触发此错误。

您可以通过此表格获得:

select A.*
from tableA as A
where a.x = (select b.y FROM test_table as b where b.z = a.z)

这种形式假设每个

b.y
只有 1 个
b.z
可以变成像

这样的内部连接
select A.*
from tableA as A
join test_table as b
    on b.z = a.z and a.x = b.y

此模式的其他形式类似于

max(b.y)
,并且可以将它们制作成子选择,例如:

select A.*
from tableA as A
join (
    select c.z, max(c.y) from test_table as c group by 1
) as b
    on b.z = a.z and a.x = b.y

但一般模式是,在其他数据库中,进行逐行查询是没有“成本”的,而 Snowflake 更适合预先构建相似数据的表,然后将这些结果等连接在一起。因此,“如何编写”示例都从针对每一行的思维转向构建所有可能答案的集合,然后将其加入。这允许尽可能并行地处理数据。虽然这意味着您开发人员需要了解您的数据以获得最佳性能,但一般来说,如果您正在进行大规模数据处理,您应该了解您的数据。所以这个成本,恕我直言,是可以接受的。


0
投票

如果您尝试匹配子查询上的两个属性。

使用如下:

  1. 如果两者都需要匹配:

    从表中选择*,其中a IN(从test_table中选择b)ANDa IN(从test_table中选择c)

  2. 如有需要匹配的:

    从表中选择*,其中a IN(从test_table中选择b)ORa IN(从test_table中选择c)

© www.soinside.com 2019 - 2024. All rights reserved.