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. Сложные типы элементов, такие как 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