Массив: не удалось найти тип массива для символа типа данных изменяющийся [] - PullRequest
1 голос
/ 05 августа 2020

У меня есть следующие образцы данных для демонстрации:

Таблица :

create table tbl_array
(
   array_data varchar[]
);

Некоторые значения:

insert into tbl_array values('{AUS,USA}'),('{IND,SA}'),('{UK,UAE,NZ}'),('{CAN,BAN,SL,KW}');

Запрос : у меня есть входные значения {USA,AUS} или {KW,CAN,SL,BAN} или {UK,UAE,NZ}, чтобы получить подробную информацию из tbl_array. Входные значения могут иметь любую последовательность.

Ожидаемый результат :

Для {USA,AUS}:

array_data
-------------
{AUS,USA}

Для {KW,CAN,SL,BAN}:

array_data
-------------
{CAN,BAN,SL,KW}

Для {UK,UAE,NZ}:

array_data
-------------
{UK,UAE,NZ}

Попробуйте :

select *
from tbl_array where array_data = ALL('{USA,AUS}');

Получение ошибки:

не удалось найти тип массива для символа типа данных изменяющийся []

1 Ответ

2 голосов
/ 05 августа 2020

Попробуйте следующее:

select * from tbl_array where array_data @> '{USA,AUS}' AND array_length(array_data, 1) = 2;

Он должен содержать оба (игнорирует порядок) и иметь длину 2 (чтобы исключить другие случаи, если вы sh).

array_length(array_data, 1) 1 означает, что ваш массив одномерный.

Я также предполагаю, что у вас нет дубликатов в ваших массивах.

Также обратите внимание, что массив, содержащий @>, может извлечь выгоду из GIN индексы.

...