に最終更新
ARRAY_EXCEPT_ALL
array_except_all
説明
arr1 と arr2 の多重集合としての差を返します。arr2 の各要素は、arr1 にある等しい要素を最大一つ取り除きます。残った要素は、重複を含めて元の順序を保持します。NULL 要素も比較され、出現回数に応じて取り除かれます。入力配列が NULL の場合は NULL を返します。
構文
ARRAY_EXCEPT_ALL(<arr1>, <arr2>)
パラメータ
| パラメータ | 説明 |
|---|---|
<arr1> | 最初の配列。要素型はサポートされるスカラー型で、<arr2> の要素型と互換性がある必要があります。 |
<arr2> | 二番目の配列。各要素は、<arr1> にある一致する要素を一つ取り除きます。要素型はサポートされるスカラー型で、<arr1> の要素型と互換性がある必要があります。 |
サポートされるスカラー要素型には、数値型、ブール型、文字列型、日付・時刻型、IPv4/IPv6 型、UUID 型があります。ARRAY、MAP、STRUCT、JSON、VARIANT などの複合要素型はサポートされません。
戻り値
ARRAY<T> を返します。この配列には、<arr1> に残った要素が元の順序で含まれます。いずれかの入力配列が NULL の場合は NULL を返します。要素が残らない場合は空の配列を返します。
使用例
多重集合としての差の基本例:
SELECT array_except_all([1, 1, 2, 3], [1, 3]);
[1, 2]
要素は一つずつ取り除かれるため、取り除かれなかった重複要素は残ります:
SELECT array_except_all(['a', 'a', 'b'], ['a']);
["a", "b"]
結果は最初の配列の要素順序を保持します:
SELECT array_except_all([3, 1, 3, 2], [3]);
[1, 3, 2]
NULL 要素も多重集合としての差の計算に含まれます:
SELECT array_except_all(['a', NULL, 'a', NULL], [NULL]);
["a", "a", null]
いずれかの入力配列が NULL の場合、結果は NULL です:
SELECT array_except_all(CAST(NULL AS ARRAY<INT>), [1]);
NULL
二番目の配列が空の場合、最初の配列はそのまま返されます:
SELECT array_except_all([1, 1, 2], CAST([] AS ARRAY<INT>));
[1, 1, 2]
array_except とは異なり、この関数は残った重複要素を保持します:
SELECT array_except([1, 1, 2], [1]), array_except_all([1, 1, 2], [1]);
[2] [1, 2]
複合要素型はサポートされません:
SELECT array_except_all([[1], [2]], [[1]]);
ERROR 1105 (HY000): array_except_all does not support types
キーワード
ARRAY, EXCEPT, MULTISET, ARRAY_EXCEPT_ALL