ClickHouse/docs/ja/sql-reference/statements/select/union.md
2024-11-18 11:58:58 +09:00

3.2 KiB

slug sidebar_label
/ja/sql-reference/statements/select/union UNION

UNION句

UNIONUNION ALLまたはUNION DISTINCTを明示的に指定して使用できます。

ALLまたはDISTINCTを指定しない場合、union_default_mode設定に依存します。UNION ALLUNION DISTINCTの違いは、UNION DISTINCTではUNIONの結果に対して重複排除変換が行われることです。これはUNION ALLを含むサブクエリからSELECT DISTINCTを行うことと同等です。

任意の数のSELECTクエリの結果を拡張して組み合わせるためにUNIONを使用できます。例:

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内の順序)に基づいて一致します。カラム名が一致しない場合、最終結果のカラム名は最初のクエリから取得されます。

Unionのために型キャストが行われます。たとえば、同じフィールドを持つ二つのクエリを結合する際に、そのフィールドが非Nullable型と互換性のあるNullable型の場合、結果のUNIONフィールドはNullable型になります。

UNIONの一部であるクエリを丸括弧で囲むことができます。ORDER BYLIMITは、個別のクエリに適用され、最終結果には適用されません。最終結果に変換を適用する必要がある場合、すべてのクエリをUNIONFROM句内のサブクエリに配置できます。

UNIONUNION ALLまたはUNION DISTINCTを明示的に指定せずに使用する場合は、union_default_mode設定を使用してUnionモードを指定できます。設定値はALLDISTINCT、または空文字列のいずれかです。しかし、UNIONunion_default_mode設定で空文字列にすると、例外がスローされます。以下の例は、異なる設定値を持つクエリの結果を示しています。

クエリ:

SET union_default_mode = 'DISTINCT';
SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 2;

結果:

┌─1─┐
│ 1 │
└───┘
┌─1─┐
│ 2 │
└───┘
┌─1─┐
│ 3 │
└───┘

クエリ:

SET union_default_mode = 'ALL';
SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 2;

結果:

┌─1─┐
│ 1 │
└───┘
┌─1─┐
│ 2 │
└───┘
┌─1─┐
│ 2 │
└───┘
┌─1─┐
│ 3 │
└───┘

UNION/UNION ALL/UNION DISTINCTの一部であるクエリは同時に実行され、その結果を組み合わせることができます。

参照