オペレーターはUNION ALL
あなたが探しているものかもしれません。
この演算子を使用すると、複数のクエリからの結果セットを連結して、それぞれのすべての行を保持できます。UNION
演算子 (ALL
キーワードなし) は、結果セットに存在する「重複」行を削除することに注意してください。演算子は、各クエリのUNION ALL
すべての行を保持します (重複チェックと削除操作を実行するオーバーヘッドがないため、パフォーマンスが向上する可能性があります)。
列の数と各列のデータ型は、各クエリで一致する必要があります。クエリの 1 つが他のクエリよりも多くの列を持っている場合、列とデータ型を「一致」させるために、他のクエリにダミーの式を含めることがあります。多くの場合、リテラルを返す各クエリの SELECT リストに式 (余分な列) を含めて、どのクエリが行の "ソース" であったかを明らかにすると便利です。
SELECT 'q1' AS source, a, b, c, d FROM t1 WHERE ...
UNION ALL
SELECT 'q2', t2.fee, t2.fi, t2.fo, 'fum' FROM t2 JOIN t3 ON ...
UNION ALL
SELECT 'q3', '1', '2', buckle, my_shoe FROM t4
このようなクエリを一連の括弧で囲み、それをインライン ビュー (または MySQL 用語では「派生テーブル」) として使用して、すべての行に対して集計操作を実行できます。
SELECT t.a
, SUM(t.b)
, AVG(t.c)
FROM (
SELECT 'q1' AS source, a, b, c, d FROM t1
UNION ALL
SELECT 'q2', t2.fee, t2.fi, t2.fo, 'fum' FROM t2
) t
GROUP BY t.a
ORDER BY t.a