UNION 演算子は、2 つ以上の SELECT 文の結果をマージするために使用します。

構文形式は、次のとおりです。
select_statement UNION ALL select_statement;
select_statement UNION [DISTINCT] select_statement;
  • UNION ALL: SELECT 操作によって戻される 2 つ以上のデータセットを1つに結合します。 結果に重複行が含まれる場合、重複行は除外されず、条件を満たすすべての行が戻されます。
  • UNION [DISTINCT]: この文では、DISTINCT を省略できます。 SELECT 操作によって戻される 2 つ以上のデータセットが 1 つのデータセットに結合されます。 結果に重複行が含まれる場合、重複行は除外されます。
以下は、UNION ALL 操作の例です。
Select * From sale_detail where region = 'Hangzhou'
        union all
select * from sale_detail where region = 'shanghai';
以下は、UNION 操作の例です。
SELECT * FROM src1 UNION SELECT * FROM src2; 
--The execution effect is equivalent to  
SELECT DISTINCT * FROM (SELECT * FROM src1 UNION ALL SELECT * FROM src2) t;
  • UNION ALL および UNION 操作の対象になる照会列の数と型は、一致していなければなりません。
  • 通常、MaxCompute で UNION ALL や UNION 操作を実行できるのは、最大 256 テーブルまでです。 テーブル数がこの制限を超えると、構文エラーが返されます。

UNION の後に指定する LIMIT 句の説明

UNION の後に CLUSTER BY、DISTRIBUTE BY、SORT BY、ORDER BY、LIMIT 句が続く場合、その句が適用されるのは UNION の最後の SELECT 文に対してではなく、その前の UNION 全体に対してです。現在、MaxCompute では、この処理が、set odps.sql.type.system.odps2=true; で設定されます。

set odps.sql.type.system.odps2=true;
SELECT explode(array(3, 1)) AS (a) UNION ALL SELECT explode(array(0, 4, 2)) AS (a) ORDER BY a LIMIT 3;
次の結果が戻されます。

| a |

| 0 |
| 1 |
| 2 |