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_schema
banco de dados; - O
CONCAT
função prefixa cada nome de tabela com um'SELECT * FROM '
cadeia; - O
GROUP_CONCAT
faz o trabalho queimplode
teria feito em PHP; -
OINTO
cláusula garante que os valores sejam salvos dentro de uma variável chamadamy_variable
;
-
OPREPARE
A instrução recebe um valor de string (como o que você salvou emmy_variable
) e verifica se o valor é uma consulta SQL;
- O
EXECUTE
declaraçã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.