Exemplo genérico (em PHP):
Construir SQL dinâmico ou construir suas consultas SQL com a ajuda de uma linguagem de programação ficaria assim (em PHP por ex.):
$pdos = $pdo->query("SHOW TABLES LIKE '%_name'");
$tables = $pdos->fetchAll();
$query = 'SELECT * FROM '.implode(' UNION SELECT * FROM ');
$pdo->query($query);
O
fetchAll O método retornará um array contendo os nomes de cada tabela selecionada. O
implode($glue, $array) função pega um array e concatena todos os valores do array usando o $glue parâmetro - geralmente você pega um array de valores e os implode usando $glue = ',' para criar uma lista de valores separados por vírgulas. No nosso caso, o
implode tem uma consulta parcial como $glue para criar um grande UNION JOIN consulta. Uma vez que a
$query final é construir, deve ser algo como:SELECT * FROM table_1_name
UNION
SELECT * FROM table_2_name
UNION
SELECT * FROM table_3_name
....
....
UNION
SELECT * FROM table_4000_name
O resultado deve conter todos os
DISTINCT linhas de todas as 4000 tabelas. Exemplo específico (no formato somente SQL):
SELECT GROUP_CONCAT(
CONCAT('select * from ', table_name)
SEPARATOR ' union '
)
INTO @my_variable
FROM information_schema.tables
WHERE table_schema = 'dbname'
AND table_name LIKE '%_name';
PREPARE my_statement FROM @my_variable;
EXECUTE my_statement;
- A primeira instrução obterá todos os nomes das tabelas do
information_schemabanco de dados; - O
CONCATfunção prefixa cada nome de tabela com um'SELECT * FROM 'cadeia; - O
GROUP_CONCATfaz o trabalho queimplodeteria feito em PHP; -
OINTOcláusula garante que os valores sejam salvos dentro de uma variável chamadamy_variable;
-
OPREPAREA instrução recebe um valor de string (como o que você salvou emmy_variable) e verifica se o valor é uma consulta SQL;
- O
EXECUTEdeclaração pega uma "instrução preparada" e bem... a executa.
@my_variable é uma variável temporária, mas só pode ser do tipo escalar (varchar, int, date, datetime, binary, float, double etc.) não uma matriz.
O
GROUP_CONCAT function é uma "função agregada", o que significa que ela recebe um valor agregado (conceito semelhante a uma matriz - no nosso caso, o conjunto de resultados de nossa consulta) e gera um resultado de string simples.