Оптимизировать вид, который динамически выбирает стол или другой - PullRequest
0 голосов
/ 21 февраля 2020

Итак, проблема в том, что у меня есть три огромных таблицы с одинаковой структурой, и мне нужно показывать результаты одного из них в зависимости от результата другого запроса.

Итак, моя таблица заказов выглядит так:

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
)

Есть ли в любом случае не сканировать все три таблицы, так как я работаю с Афиной, поэтому не могу программировать?

1 Ответ

0 голосов
/ 21 февраля 2020

Я предполагаю, что изменение схемы базы данных не вариант.
Если бы это было так, вы могли бы использовать одну таблицу базы данных и добавить столбец CODE, значение которого было бы A , B или C.

В основном результат запроса SQL в вашей таблице ORDER определяет, какую другую таблицу базы данных вам нужно запросить. Например, если CODE в таблице ORDER равно A , то вам нужно запросить таблицу T_RESULTS_A.

Вы написали в своем вопросе

Я работаю с Athena, поэтому не могу запрограммировать

Я вижу, что есть драйвер ODB C и драйвер JDB C для Афины, так что вы можете программировать с NET или Java. Таким образом, вы могли бы написать код, который запрашивает таблицу ORDER, и использовать результат этого запроса для построения другой строки запроса, чтобы запросить только соответствующую таблицу.

Еще одна мысль, которая у меня была dynamici c SQL. База данных Oracle поддерживает это. Я могу создать строку, содержащую переменные, где одна переменная является именем таблицы базы данных и Oracle интерпретирует строку как SQL и выполняет ее. Я кратко искал Inte rnet, чтобы увидеть, поддерживает ли Афина это (поскольку у меня нет опыта работы с Афиной), но ничего не нашел - это не значит, что его не существует.

...