ЛЮБОЙ из данного списка в postgresql - PullRequest
0 голосов
/ 19 сентября 2018

У меня есть таблица с полем массива символов, содержащим название города, и я должен возвращать строки, имеющие точно из данного списка.например, таблица t1

 id | city
----+-------------------------
  1 | {Mumbai}
  2 | {Mumbai,Amritsar}
  3 | {Mumbai,Delhi}
  4 | {Delhi}

приведен список городов Мумбаи, выходное значение для Дели должно быть

 id | city
----+-------------------------
  1 | {Mumbai}
  3 | {Mumbai,Delhi}
  4 | {Delhi}

Пожалуйста, помогите, если у кого-то есть идеи.Спасибо

Ответы [ 3 ]

0 голосов
/ 19 сентября 2018

Насколько я могу судить по вашему вопросу, оператор "содержится" <@ делает то, что вы хотите

create table bad_design (id integer, city text[]);
insert into bad_design 
values
(1, '{Mumbai}'),
(2, '{Mumbai,Amritsar}'),
(3, '{Mumbai,Delhi}'),
(4, '{Delhi}');

select *
from bad_design
where city <@ array['Mumbai', 'Delhi'];

возвращает:

id | city          
---+---------------
 1 | {Mumbai}      
 3 | {Mumbai,Delhi}
 4 | {Delhi}       
0 голосов
/ 20 сентября 2018
select * 
from t1 
where Array['Mumbai', 'Delhi']::varchar[] @> city;

это проверит, что значения в БД принадлежат данному списку элементов.

0 голосов
/ 19 сентября 2018

Сначала нужно получить идентификаторы, которые не содержат «Мумбаи» и «Дели», и исключить их из таблицы.

Unnest () можно использовать для получения отдельных элементов измассив.

select id,city from table where id not in
       (select id from 
             (select id,unnest(city) as city from table)t
       where city not in ('Mumbai','delhi'));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...