我有三张桌子。每个表与其他两个表都有共同的列,但某些属性有所不同。由于我对公共属性感兴趣,我想发出一个请求来从所有三个表中获取数据。
我需要通过 UNION 从所有三个表中获取项目。在 AWS Athena 中可以吗?
例如:
table1 (att1, att2, att3)
table2 (att1, att2, att_3)
table3 (att1, att2, att3, att4)
目标:在同一请求中从 table1、table2、table3 获取项目,无需加入。
这将返回三个表的列中的所有值(包括
table3
中的第四列。如果您只需要 att1, att2
,只需省略其他列并仅在 SELECT
语句中键入这些值。
SELECT att1, att2, att3, NULL as att4 FROM table1
UNION ALL
SELECT att1, att2, att_3, NULL FROM table2
UNION ALL
SELECT att1, att2, att3, att4 FROM table3
如果有来自不同表的值,则UNION ALL
返回重复值,而UNION
应用DISTINCT
,这意味着返回唯一值集。
如果您正在寻找从您提到的所有表中返回公共列(按名称)的解决方案,那么您有以下选择:
在 AWS Athena 中,您可以使用 UNION 运算符合并两个(或多个)单独查询表达式的结果。例如:
SELECT att1, att2, att3 FROM table1
UNION
SELECT att1, att2, att3 FROM table2
UNION
SELECT att1, att2, att3 FROM table3
我假设 UNION 中的每个 SELECT 语句具有相同数量的列,并且具有相同的数据类型和相同的顺序。
从表 1 中选择 att1、att2、att3
工会
从表2中选择att1、att2、att3
工会
从表3中选择att1、att2、att3
它将返回来自
的重复值从表 1 中选择 att1、att2、att3
联合所有
从表2中选择att1、att2、att3
联合所有
从表3中选择att1、att2、att3