一般的な例(PHP):
プログラミング言語を使用して動的SQLを構築したり、SQLクエリを構築したりすると、次のようになります(たとえば、PHPの場合)。
$pdos = $pdo->query("SHOW TABLES LIKE '%_name'");
$tables = $pdos->fetchAll();
$query = 'SELECT * FROM '.implode(' UNION SELECT * FROM ');
$pdo->query($query);
このfetchAll
メソッドは、選択された各テーブルの名前を含む配列を返します。
このimplode($glue, $array)
関数は配列を受け取り、パラメーターを使用して配列内のすべての値を連結し$glue
ます。通常、値の配列を取得し、それらを使用$glue = ','
して、コマで区切られた値のリストを作成します。
この場合、1つの大きなクエリを作成するためimplode
の部分的なクエリがあります。$glue
UNION JOIN
ファイナル$query
がビルドされると、次のようになります。
SELECT * FROM table_1_name
UNION
SELECT * FROM table_2_name
UNION
SELECT * FROM table_3_name
....
....
UNION
SELECT * FROM table_4000_name
結果には、DISTINCT
4000個のテーブルすべてのすべての行が含まれている必要があります。
特定の例(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;
@my_variableは一時変数ですが、スカラー型(varchar、int、date、datetime、binary、float、doubleなど)のみであり、配列ではありません。
このGROUP_CONCAT
関数は「集計関数」です。つまり、集計値(配列と同様の概念-この場合はクエリの結果セット)を受け取り、単純な文字列の結果を出力します。