Как объединить группу таблиц с одинаковым суффиксом? - PullRequest
0 голосов
/ 04 февраля 2019

Так что я не эксперт по MYSQL, и мне действительно нужна помощь, чтобы понять это.В настоящее время у меня есть более 60 таблиц, которые я хочу объединить в одну таблицу, ни одна из данных в этих таблицах не соответствует друг другу, поэтому мне нужно, чтобы строки всех таблиц были в одной.Они имеют одинаковую схему, если это правильный термин, в основном в том же формате.Все они оканчиваются одинаковым суффиксом '_dir'.

Я думал, что это может сработать, примерно так:

Получить все таблицы под одним суффиксом, Для каждой таблицы в соединении списка таблицили вставьте строку в main_table.

Я не знаю, как это сделать в MySQL или, если это вообще возможно.Я знаю, что могу использовать,

SELECT *
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_NAME LIKE '%_dir%'

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

Вот пример входных данных:

таблица 1:

|  NAME  |          INST_NAME              | Drop
| data 1 | 'this is an example instance1   | 1.5 
| data 1 | 'this is an example of instance2| 2.0

таблица 2:

|   NAME |     INST_NAME                   | DROP
| data 2 | 'this is an example instance1   | 3.0 
| data 2 | 'this is an example of instance2| 4.0

Таблица вывода:

|  NAME  |      INST_NAME                  | DROP
| data 1 | 'this is an example instance1   | 1.5 
| data 1 | 'this is an example of instance2| 2.0
| data 2 | 'this is an example instance1   | 3.0 
| data 2 | 'this is an example of instance2| 4.0

Обратите внимание, что я должен сделать это для более чем 60 таблиц, а не только 2. В той же базе данных есть и другие таблицы с различной информацией, поэтому я не могу просто объединить все таблицы там.

1 Ответ

0 голосов
/ 04 февраля 2019

Вам действительно нужно исправить структуру данных.Вы не должны хранить данные в таблицах с одинаковой структурой - эта информация должна быть помещена в одну таблицу.Тогда у вас не будет этой проблемы.

На данный момент вы можете создать представление со всеми данными.Вы можете сгенерировать код для представления следующим образом:

SELECT CONCAT('CREATE VIEW vw_dir AS',
              GROUP_CONCAT(REPLACE('SELECT NAME, INST_NAME, `DROP` FROM [T]', '[T]'), TABLE_NAME)
                           SEPARATOR ' UNION ALL '
                          )
             ) as create_view_sql
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_NAME LIKE '%_dir%';

Затем возьмите SQL, запустите его, и у вас будет представление с именем vw_dir.В следующий раз, когда вы добавите таблицу, вам нужно будет отбросить представление и затем воссоздать его.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...