如何在Athena中关联两张表并基于匹配结果创建标记列?
解决方法
首先纠正你原SQL的问题:语句里的逗号是语法错误,而且当前的关联方式只能拿到Table2的id,会漏掉Table1里的id3,没法满足“包含所有id”的要求。
要实现需求,需要先合并两张表的所有唯一id,再判断每个id是否存在于Table2中,以下是两种适用于Athena的写法:
方法一:先合并id再左关联判断
WITH all_ids AS ( -- 合并两张表的所有唯一id SELECT id FROM table1 UNION SELECT id FROM table2 ) SELECT ai.id, -- 左关联后判断Table2是否有匹配id,生成flag CASE WHEN t2.id IS NOT NULL THEN TRUE ELSE FALSE END AS flag FROM all_ids ai LEFT JOIN table2 t2 ON ai.id = t2.id ORDER BY ai.id;
方法二:用EXISTS子查询直接判断
WITH all_ids AS ( SELECT id FROM table1 UNION SELECT id FROM table2 ) SELECT id, -- 用EXISTS检查当前id是否在Table2中 EXISTS(SELECT 1 FROM table2 t2 WHERE t2.id = ai.id) AS flag FROM all_ids ai ORDER BY id;
说明:
UNION会自动去重,确保每个id只出现一次;如果不需要去重可以用UNION ALL,根据你的需求用UNION即可。- Athena原生支持布尔类型,所以可以直接返回
TRUE/FALSE。
内容的提问来源于stack exchange,提问作者Mikasa
相关产品推荐
相关产品推荐

