Предположим, что у нас есть массив в PostgreSQL:
SELECT ARRAY['один', 'два', 'три'];
Результат вызова:
Мы хотим проверить существование строки ‘четыре‘ в этом массиве. Как это сделать?
Решение задачи по проверки существования строки в массиве PostgreSQL через дополнительный массив из одного элемента строки и оператора @>
Для нашей задачи это самый простой и короткий способ решения.
Всё что нам нужно — это использование специального оператора @> (знак почты и правая угловая скобка)
Слева мы пишем массив в котором хотим искать. Слева — то ГДЕ ищем.
Справа мы пишем массив, элемент которого хотим поискать в левом массиве. Справа — то ЧТО ищем.
SELECT ARRAY['один', 'два', 'три'] @> ARRAY['один'];
Результат вызова:
SELECT ARRAY['один', 'два', 'три'] @> ARRAY['четыре'];
Результат вызова:
Можно поменять местами массивы и использовать противоположный оператор <@.
Суть остаётся той же. Только теперь слева ЧТО ищем, а справа ГДЕ ищем.
SELECT ARRAY['один'] <@ ARRAY['один', 'два', 'три']; -- true SELECT ARRAY['четыре'] <@ ARRAY['один', 'два', 'три']; -- false
Решение задачи по проверки существования строки в массиве PostgreSQL через дополнительный массив из одного элемента строки и оператора &&
Это решение немного похоже на предыдущее. Только на этот раз можно не заморачиваться с расположением массивов справа и слева от знака &&.
SELECT ARRAY['один', 'два', 'три'] && ARRAY['один']; SELECT ARRAY['один', 'два', 'три'] && ARRAY['четыре']; SELECT ARRAY['один'] && ARRAY['один', 'два', 'три']; SELECT ARRAY['четыре'] && ARRAY['один', 'два', 'три'];
Результат от перестановки массивов местами не изменится.
Решение задачи по проверки существования строки в массиве PostgreSQL через переворот массива в таблицу
Одно из решений сводится к превращению массива строк в табличный столбец данных.
Мы как-бы переворачиваем массив из горизонтального положения в вертикальное.
Делается этот переворот при помощи функции unnest().
На первом этапе мы получаем таблицу:
SELECT unnest(ARRAY['один', 'два', 'три']);
Результат вызова:
С этого момента мы можем работать с таблицей стандартными командами SQL.
Мы можем использовать:
SELECT EXISTS (SELECT * FROM unnest(ARRAY['один', 'два', 'три']) WHERE unnest = 'один');
Результат вызова:
SELECT EXISTS (SELECT * FROM unnest(ARRAY['один', 'два', 'три']) WHERE unnest = 'четыре');
Результат вызова:
Информационные ссылки
Официальный сайт WEB-оболочки pgAdmin — https://www.pgadmin.org
Официальный сайт СУБД PostgreSQL — https://www.postgresql.org
Раздел «4.2.12. Конструкторы массивов» — https://postgrespro.ru/docs/postgresql/14/sql-expressions#SQL-SYNTAX-ARRAY-CONSTRUCTORS
Раздел «9.19. Функции и операторы для работы с массивами» — https://postgrespro.ru/docs/postgresql/14/functions-array