【发布时间】:2022-01-09 21:57:27
【问题描述】:
上下文
我正在使用 Athena 构建查询,我注意到使用“NOT IN”对查询的运行时间产生了重大影响。该查询在两个表之间执行连接,旨在通过排除一组 id 来过滤结果的行。
id 不是唯一的。它可能会出现在多行中。本质上,我编写了子查询,因为如果行满足子查询中的条件,我想忽略任何/所有具有给定 id 值的行。
换句话说,对于在数据库中有 5 行的给定 ID“24324”,如果任何单个行的值满足子查询中的条件,我们希望过滤掉所有行。
我的问题
有没有更有效的方法来构建这个查询,我没有考虑过减少运行时间?
查询
表名和列名已使用占位符/通用值进行了清理。
SELECT *
FROM table_a
INNER JOIN table_b ON table_b.external_id = table_a.external_id
AND table_b.client_name = table_a.client
-- These are the ids we do not want in the final result.
WHERE table_b.id NOT IN (SELECT distinct(table_b.id)
FROM table_b
WHERE table_b.decision IS NOT NULL
OR table_b.submission_time IS NOT NULL)
【问题讨论】:
标签: sql amazon-web-services amazon-athena presto