メインコンテンツへスキップ
UNION は、UNION ALL または UNION DISTINCT を明示的に指定して使用できます。 ALL または DISTINCT を指定しない場合の動作は、union_default_mode 設定に依存します。UNION ALLUNION DISTINCT の違いは、UNION DISTINCT では結合結果に対して重複排除が行われる点です。これは、UNION ALL を含むサブクエリに対して SELECT DISTINCT を実行するのと同等です。 UNION を使用すると、結果を連結して任意の数の SELECT クエリを結合できます。例:
Query
SELECT CounterID, 1 AS table, toInt64(count()) AS c
    FROM test.hits
    GROUP BY CounterID

UNION ALL

SELECT CounterID, 2 AS table, sum(Sign) AS c
    FROM test.visits
    GROUP BY CounterID
    HAVING c > 0
結果のカラムは、その索引 (SELECT 内での順序) に基づいて対応付けられます。カラム名が一致しない場合、最終結果のカラム名は最初のクエリから取得されます。 ユニオンでは型変換が行われます。たとえば、結合する 2 つのクエリに、互換性のある型で、同じフィールドが一方では非 Nullable 型、もう一方では Nullable 型として含まれている場合、結果の UNION ではそのフィールドは Nullable 型になります。 UNION を構成するクエリは () で囲むことができます。ORDER BYLIMIT は最終結果ではなく、それぞれのクエリに適用されます。最終結果に変換を適用する必要がある場合は、UNION を含むすべてのクエリを FROM 句のサブクエリに入れることができます。 UNION ALL または UNION DISTINCT を明示的に指定せずに UNION を使用する場合は、union_default_mode 設定を使ってユニオンモードを指定できます。設定値には ALLDISTINCT、または空文字列を指定できます。ただし、union_default_mode 設定が空文字列の状態で UNION を使用すると、例外が発生します。以下の例は、設定値ごとのクエリ結果を示しています。
Query
SET union_default_mode = 'DISTINCT';
SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 2;
Response
┌─1─┐
│ 1 │
└───┘
┌─1─┐
│ 2 │
└───┘
┌─1─┐
│ 3 │
└───┘
Query
SET union_default_mode = 'ALL';
SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 2;
Response
┌─1─┐
│ 1 │
└───┘
┌─1─┐
│ 2 │
└───┘
┌─1─┐
│ 2 │
└───┘
┌─1─┐
│ 3 │
└───┘
UNION/UNION ALL/UNION DISTINCT を構成するクエリは同時に実行される場合があり、その結果は混在することがあります。 関連項目
最終更新日 2026年6月10日