首页 > 解决方案 > 雪花选择子句中的子查询不逐行评估?

问题描述

我正在尝试编写一个非常简单的查询:我想提取雪花表中的所有帐户,并在类型字段中使用“启动”标记可以链接到机会表中记录的帐户(真/假)。

这是一个我认为会返回我正在寻找的查询的查询:

SELECT
    acc.id
    , acc.id IN (
        SELECT DISTINCT(opp.accountid)
        FROM "OPPORTUNITY" opp
        WHERE opp.type LIKE '%Startup%'
        ) AS startup
FROM "ACCOUNT" acc

帐户表有约 100,000 个不同的记录,子查询返回一个仅包含约 11,000 个不同帐户 ID 的列表,但别名为“启动”的字段包含每个帐户的 TRUE。我已经尝试诊断为什么这会返回所有 True 而没有运气。我还尝试使用带有相关子查询的 EXISTS 编写相同的查询并得到相同的结果。

我能够通过在 FROM 子句之后加入子查询来构建一个工作查询,但我很想了解为什么上面的查询无法正确评估每一行。

任何帮助,将不胜感激。谢谢!

标签: sqlsubquerycorrelated-subquerysnowflake-cloud-data-platform

解决方案


我无法重现您看到的行为:

create or replace table ACCOUNT(id int);
insert into ACCOUNT values (1), (2), (3);
create or replace table OPPORTUNITY(accountid int, type varchar);
insert into OPPORTUNITY values (1, 'Startup'), (2, 'Startup');

运行上面的查询然后产生结果:

Row   ID   STARTUP
1     1    TRUE
2     2    TRUE
3     3    FALSE

推荐阅读