У меня есть база данных Oracle со многими таблицами, которые имеют одинаковую структуру (столбцы все одинаковые). Имена таблиц аналогичны. Имена таблиц выглядят как table_1, table_2, table_3 ...один запрос для многих подобных таблиц
Я знаю, что это не самый эффективный дизайн, но в настоящее время у меня нет возможности изменить это.
В этом случае можно сделать один запрос sql, чтобы извлечь все строки с одним и тем же условием для нескольких таблиц (сотни таблиц) без явного использования точного имени таблицы?
Я понимаю, что я мог бы использовать что-то вроде выберите * из table_1 UNION выбрать * из table_2 UNION выбрать * из table_3 ... выберите * от table_1000
Но есть более элегантное заявление SQL, который может быть запущен, что извлекает из всех совпадающих имен таблиц в один результат, не указывая явно каждую таблицу.
Что-то вроде
выберите * от table_%
ли что-то подобное возможно? Если нет, то какой самый эффективный способ написать этот запрос?
Выберите * из таблицы_% .. не будет работать. Если вы не хотите самостоятельно писать запрос. Вы можете выполнить поиск в sybObject для таблицы, например table_%, и построить запрос, разобрав их один за другим. – Ajay
Да, я знаю, что могу это сделать, но я надеялся на более элегантное решение. Если что-то более изящное невозможно, тогда мне придется идти с каким-то циклом, который я пытаюсь избежать. – Jonjilla
Предполагая, что количество таблиц остается статическим, вы можете создать представление, объединяющее все объединения таблиц, а затем запросить представление.Тем не менее, я не хотел бы ручаться за то, сможет ли Oracle ударить предикаты в этом случае - вам придется протестировать. Кроме того, вам нужно, чтобы результаты были отличными? У меня возникнет соблазн создать представление, используя UNION ALL, а не UNION, а затем бросая отчетливые результаты, если вам нужны разные результаты. – Boneist