sql - 雪花选择子句中的子查询不逐行评估?
问题描述
我正在尝试编写一个非常简单的查询:我想提取雪花表中的所有帐户,并在类型字段中使用“启动”标记可以链接到机会表中记录的帐户(真/假)。
这是一个我认为会返回我正在寻找的查询的查询:
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 子句之后加入子查询来构建一个工作查询,但我很想了解为什么上面的查询无法正确评估每一行。
任何帮助,将不胜感激。谢谢!
解决方案
我无法重现您看到的行为:
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
推荐阅读
- python-3.x - Paramiko 中的意外输出
- assembly - 用汇编语言将字符串转换为十进制
- erlang - 如何让 Elixir 节点在启动时自动连接?
- java - 带有 Netbeans 的 MacOS 上的 OpenCV
- c++ - 如何在 C++ 中对 std::stack 进行洗牌?
- python - 从 SQL 到 pandas/python 的示例分组
- javascript - 如何获取复选框是否被选中
- spring-mvc - javax.servlet.jsp.JspTagException:Bean 名称“用户”的 BindingResult 和普通目标对象都不能用作请求属性
- javascript - 为什么“渲染”不会用更新的状态重新渲染 UI?
- java - 如何找到涉及对数和求和规则的嵌套 for 循环的时间复杂度?