You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AWS Athena基于条件合并数据表:保留Table_1全量及Table_2新增行

解决AWS Athena中合并两张表并保留指定行的问题

错误原因分析

你之前的SQL报错**“子查询返回多列暂不支持”**,是因为WHERE child_id not in table_1的写法错误:NOT IN要求后面的子查询只能返回单一列(仅child_id),而直接写表名会返回整张表的所有列,不符合语法要求。

正确解决方案

以下两种方法都能实现你的需求:保留Table_1的所有行,同时添加Table_2中child_id未在Table_1出现的行。

方法一:使用NOT EXISTS子查询

这种方式逻辑清晰,且避免了NOT IN处理NULL值时的潜在问题:

SELECT child_id, parent_id
FROM table_1
UNION ALL
SELECT t2.child_id, t2.parent_id
FROM table_2 t2
WHERE NOT EXISTS (
    SELECT 1
    FROM table_1 t1
    WHERE t1.child_id = t2.child_id
)

方法二:使用LEFT JOIN筛选未匹配行

通过左连接后筛选Table_1中无匹配的行,同样能达到效果:

SELECT child_id, parent_id
FROM table_1
UNION ALL
SELECT t2.child_id, t2.parent_id
FROM table_2 t2
LEFT JOIN table_1 t1 ON t1.child_id = t2.child_id
WHERE t1.child_id IS NULL

说明

  • 使用UNION ALL而非UNION:因为我们已经确保Table_2中筛选出的行不会和Table_1重复,UNION ALL不需要去重,性能更优。
  • 若需要根据多列判断是否重复,只需在子查询或JOIN条件中添加对应列即可(比如同时匹配child_id和parent_id)。

内容的提问来源于stack exchange,提问作者AsiprantDeveloper

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 21:55:19