【问题标题】:Optimize view that dynamically choose a table or another优化动态选择表或其他的视图
【发布时间】:2020-02-21 13:51:31
【问题描述】:

所以问题是我有三个结构相同的大表,我需要根据另一个查询的结果显示其中一个的结果。

所以我的订单表是这样的:

code   order
A      0
B      2
C      1

我需要从t_results检索数据

我的方法(有效)如下所示:

select *
from t_results_a
where 'A' in (
  select code
  from t_order
  where order = 0
)

UNION ALL

select *
from t_results_b
where 'B' in (
  select code
  from t_order
  where order = 0
)

UNION ALL

select *
from t_results_c
where 'C' in (
  select code
  from t_order
  where order = 0
)

是否有不扫描所有三个表的方法,因为我正在使用 Athena,所以我无法编程?

【问题讨论】:

    标签: sql amazon-athena


    【解决方案1】:

    我认为更改数据库架构不是一种选择。
    如果是,您可以使用一个数据库表并添加一个CODE 列,其值为ABC

    基本上,您的ORDER 表上的SQL 查询结果决定了您需要查询的其他数据库表。例如,如果表ORDER 中的CODEA,则必须查询表T_RESULTS_A

    您在问题中写道

    我正在与 Athena 合作,所以我无法编程

    我看到 Athena 有一个 ODBC driver 和一个 JDBC driver,因此您可以使用 .NET 或 Java 进行编程。因此,您可以编写查询ORDER 表的代码,并使用该查询的结果构建另一个查询字符串来仅查询相关表。

    我的另一个想法是动态 SQL。 Oracle 数据库支持它。我可以创建一个包含变量的字符串,其中一个变量是数据库表名,并让 Oracle 将该字符串解释为 SQL 并执行它。我简单地搜索了互联网以查看 Athena 是否支持此功能(因为我没有使用 Athena 的经验)但一无所获 - 这并不意味着它不存在。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-11-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-25
      • 1970-01-01
      • 2019-07-01
      • 1970-01-01
      相关资源
      最近更新 更多