2017-02-14 4 views
1

У меня около 300 таблиц с одинаковыми типами полей, и у меня есть другая таблица со списком из 300 таблиц и их статус. Есть ли одно решение для запросов для объединения таблиц, выбранных в зависимости от статуса.mysql объединение таблиц, выбранных из другой таблицы

Скажем, каждая из 300 таблиц имеет записи пользователя (идентификатор, имя, фамилия). И еще одна таблица, в которой записаны таблицы и статус (имя таблицы, код состояния (активный/неактивный)). Я хотел бы создать объединение записей пользователей из всех активных таблиц.

ответ

0

Возможно как-то. Но почему бы вам просто не использовать одну таблицу со столбцами (id, first_name, last_name, table_name)? Запрос будет таким же простым, как:

select 
    m.id, m.first_name, m.last_name 
from 
    mytable m inner join tables t on 
    m.table_name = t.table_name 
where 
    t.status='Active' 

С соответствующими индексами оно будет исполнено.

Решение без изменения структуры таблицы потребуется, например, динамический запрос, но я бы не рекомендовал его:

select 
    group_concat(
    concat('select * from ', table_name) 
    separator ' union all ' 
) gc 
from 
    status 
where 
    status='Active' 
into @sql; 

prepare stmt from @sql; 
execute stmt; 
deallocate prepare stmt; 

(это создать союз всех запросов в строку SQL, а затем она будет выполните его. Таблицы должны быть проэкспонированы, а также быть осторожнее о пределе размера group_concat)

+0

@IlyaI, если вам действительно нужно использовать второе решение, вы можете изменить ограничение размера с помощью команды SET SESSION group_concat_max_len = 1000000; ' – fthiella

+0

I уже использовали первое решение, но хотели посмотреть, возможно ли это сделать с несколькими таблицами. Я попробую второе решение. Благодаря! –

Смежные вопросы