Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PostgreSQL > Операции над массивами


Автор: polin11 5.3.2023, 02:38
Использую Postgresql

1) Есть удобная операция конкатенация массива ||, но при такой операции могут быть будут элементов
например array[1,2,3] || array[1,4] -> array[1,2,3,1,4]
Вопрос как объединить 2 массива при этом убрать дубли элементов?

2) Если ли операция или функция убрать из массива элементы другого массива, то есть
array[1,2,3] - array[1,4] -> array[2,3]?

Автор: RubyLudwigValentin 5.3.2023, 09:18
Postgres уже объектная база данных. Массивы в базе - это не стандартный SQL.
Но, возможно, можно написать хранимую процедуру, которая будет убирать дубли из вашего массива.

Автор: Akina 5.3.2023, 22:03
polin11, 
Цитата(polin11 @  5.3.2023,  03:38 Найти цитируемый пост)
Вопрос как объединить 2 массива при этом убрать дубли элементов?

Задача очевидно недоопределена. С точки зрения Postgre два массива с одинаковым набором элементов, но различающимся их порядком - различны. То есть следует более точно описывать задачу - в зависимости от дополнительных условий финальное решение будет различным.

Цитата(polin11 @  5.3.2023,  03:38 Найти цитируемый пост)
Если ли операция или функция убрать из массива элементы другого массива

Нет. UNNEST - EXCEPT - AGGREGATE. Или иное решение подобного толка.

Добавлено через 1 минуту и 28 секунд
Цитата(RubyLudwigValentin @  5.3.2023,  10:18 Найти цитируемый пост)
Postgres уже объектная база данных. 

Нет такого термина. А если имеется в виду объектно-ориентированная - то это утверждение очевидно ложно.

Цитата(RubyLudwigValentin @  5.3.2023,  10:18 Найти цитируемый пост)
можно написать хранимую процедуру, которая будет убирать дубли из вашего массива.

Из пушки по воробьям..

Автор: RubyLudwigValentin 6.3.2023, 03:11
Цитата

Нет такого термина. А если имеется в виду объектно-ориентированная - то это утверждение очевидно ложно.


ОК, уточню, база данных SQL, но с объектами. Массив - это объектное расширение.

Цитата

Из пушки по воробьям..

 smile  smile  smile 
А где вложенный цикл писать будете?
Процедура типа функция. На входе - массив с повторениями, на выходе - уже без.
Можно дополнительно отсортировать массив.

Автор: Akina 6.3.2023, 07:49
Цитата(RubyLudwigValentin @  6.3.2023,  04:11 Найти цитируемый пост)
А где вложенный цикл писать будете?

Вообще не буду его писать, всё сделаю в запросе. В крайнем случае есть CTE.

Автор: RubyLudwigValentin 6.3.2023, 11:04
Цитата(Akina @  6.3.2023,  07:49 Найти цитируемый пост)
Вообще не буду его писать, всё сделаю в запросе. В крайнем случае есть CTE.


А как из массива прочитать DISTINCT значения? Потрактовать его как таблицу? Существует ли такая функция?

Автор: Akina 6.3.2023, 14:27
RubyLudwigValentin, я ж выше всё рассказал.

Цитата(Akina @  5.3.2023,  23:03 Найти цитируемый пост)
UNNEST - EXCEPT - AGGREGATE


Что ещё нужно-то?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)