亚马逊雅典娜 - 从多个表中选择而不加入

sam*_*ara 2 sql amazon-web-services presto amazon-athena

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

我需要通过 UNION 从所有三个表中获取项目。在 AWS Athena 中可以吗?

前任:

table1 (att1, att2, att3)
table2 (att1, att2, att_3)
table3 (att1, att2, att3, att4)
Run Code Online (Sandbox Code Playgroud)

目标:从 table1、table2、table3 中获取项目,而无需在同一请求中加入。

Kam*_*ski 6

这将返回三个表的列中的所有值(包括来自 的第四列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
Run Code Online (Sandbox Code Playgroud)

UNION ALL如果有来自不同表的任何值,则返回重复值而UNION适用DISTINCT,这意味着返回唯一值集。

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

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