亚马逊雅典娜-从多个表中选择而无需联接

时间:2018-07-15 16:12:41

标签: sql amazon-web-services amazon-athena presto

我有三个桌子。每个表与其他两个表具有公共列,但某些属性有所不同。由于我对common属性感兴趣,因此我想提出一个请求以从所有三个表中获取数据。

我需要通过UNION从所有三个表中获取项目。 AWS Athena是否有可能?

例如:

table1 (att1, att2, att3)
table2 (att1, att2, att_3)
table3 (att1, att2, att3, att4)

目标:从表1,表2,表3中获取项目,而无需加入同一请求。

2 个答案:

答案 0 :(得分:1)

这将返回三个表的列中的所有值(包括table3的第四列。如果只需要att1, att2,则只需省略其他列,并仅在SELECT语句中键入这些列即可。< / p>

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则表示返回唯一值集。

如果您正在寻找一种从您提到的所有表中返回公用列(按名称)的解决方案,那么您可以选择以下选项:

  1. 像上面那样做,这意味着要明确指定
  2. 您将必须编写一个过程来执行动态语句,该过程将在给定表中寻找匹配的列

答案 1 :(得分:0)

在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语句具有相同数量的列,并且具有相同的数据类型,并且顺序相同。