Перейти к содержимому
Последнее обновление

ARRAY_UNION

Назначение​

ARRAY_UNION возвращает объединение нескольких массивов: объединяет все их элементы, удаляет дубликаты и возвращает новый массив.

Синтаксис​

ARRAY_UNION(arr1, arr2, ..., arrN)

Параметры​

  • arr1, arr2, ..., arrN: произвольное число входных массивов типа ARRAY<T>.
    • Тип элементов T должен быть одинаковым для всех массивов или допускать неявное приведение к общему типу.
    • Тип элементов T может быть числовым, строковым, типом даты/времени, IP или UUID.

Возвращаемое значение​

  • Возвращает новый массив типа ARRAY<T>, содержащий все уникальные элементы входных массивов (без дубликатов).
    • Если хотя бы один входной параметр равен NULL, возвращается NULL (см. пример).

Примечания по использованию​

  1. Дубликаты удаляются на основе сравнения на равенство (оператор =).
  2. В результирующем массиве сохраняется только один NULL (см. пример).
  3. Если сам входной массив содержит несколько одинаковых элементов, сохраняется только один из них (см. пример).
  4. Порядок элементов в результирующем массиве не гарантируется.

Примеры​

  1. Простой пример

    SELECT ARRAY_UNION(ARRAY('hello', 'world'), ARRAY('hello', 'world')); 
    +---------------------------------------------------------------+
    | ARRAY_UNION(ARRAY('hello', 'world'), ARRAY('hello', 'world')) |
    +---------------------------------------------------------------+
    | ["world", "hello"] |
    +---------------------------------------------------------------+

    SELECT ARRAY_UNION(ARRAY(1, 2, 3), ARRAY(3, 5, 6));
    +---------------------------------------------+
    | ARRAY_UNION(ARRAY(1, 2, 3), ARRAY(3, 5, 6)) |
    +---------------------------------------------+
    | [1, 5, 2, 6, 3] |
    +---------------------------------------------+
  2. Если хотя бы один входной массив равен NULL, возвращается NULL

    SELECT ARRAY_UNION(ARRAY('hello', 'world'), ARRAY('hello', 'world'), NULL); 
    +---------------------------------------------------------------------+
    | ARRAY_UNION(ARRAY('hello', 'world'), ARRAY('hello', 'world'), NULL) |
    +---------------------------------------------------------------------+
    | NULL |
    +---------------------------------------------------------------------+
  3. Если входные массивы содержат NULL, результирующий массив будет содержать только один NULL

    SELECT ARRAY_UNION(ARRAY('hello', 'world'), ARRAY('hello', NULL)); 
    +---------------------------------------------------------------------+
    | ARRAY_UNION(ARRAY('hello', 'world', 'hello'), ARRAY('hello', NULL)) |
    +---------------------------------------------------------------------+
    | [null, "world", "hello"] |
    +---------------------------------------------------------------------+

    SELECT ARRAY_UNION(ARRAY(NULL, 'world'), ARRAY('hello', NULL));
    +---------------------------------------------------------+
    | ARRAY_UNION(ARRAY(NULL, 'world'), ARRAY('hello', NULL)) |
    +---------------------------------------------------------+
    | [null, "world", "hello"] |
    +---------------------------------------------------------+
  4. Если массив содержит повторяющиеся элементы, возвращается только один из них

    SELECT ARRAY_UNION(ARRAY('hello', 'world', 'hello'), ARRAY('hello', NULL)); 
    +------------------------------------------------------------+
    | ARRAY_UNION(ARRAY('hello', 'world'), ARRAY('hello', NULL)) |
    +------------------------------------------------------------+
    | [null, "world", "hello"] |
    +------------------------------------------------------------+