Массив: не удалось найти тип массива для символа типа данных изменяющийся []
У меня есть следующие образцы данных для демонстрации:
Таблица:
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 ответ
Попробуй это:
select * from tbl_array where array_data @> '{USA,AUS}' AND array_length(array_data, 1) = 2;
Он должен содержать оба (игнорировать порядок) и иметь длину 2 (чтобы исключить другие случаи, если хотите).
array_length(array_data, 1)
1 означает, что ваш массив одномерный.
Я также предполагаю, что в ваших массивах нет дубликатов.
Также обратите внимание, что массив содержит @>
могут извлечь выгоду из индексов GIN.