Postgres选择枚举数组中特定数组的位置

问题描述 投票:0回答:2

鉴于这个例子:

表:

CREATE TABLE public.animals
(
  name character varying(64),
  whitelist animal_whitelist[]
)

自定义枚举类型animal_whitelist:

CREATE TYPE public.animal_whitelist AS ENUM
  ('dog',
  'cat',
  'bird');

如何专门选择白名单。

在伪代码中,这是我想要选择的。

  • animal_whitelist等于dog的任何行
  • animal_whitelist等于dogcat的任何行
  • animal_whitelist等于dogcat的任何行
  • animal_whitelist不是dogcatbird的任何行
sql postgresql
2个回答
1
投票

请检查这个one

    insert into animals ("name", "whitelist") values ('bobic', array['dog']::animal_whitelist[]);
insert into animals ("name", "whitelist") values ('barsic', array['cat']::animal_whitelist[]);
insert into animals ("name", "whitelist") values ('pet', array['dog', 'cat', 'bird']::animal_whitelist[]);
insert into animals ("name") values ('jim');


-- Any rows where the animal_whitelist equals dog
select * from animals where  array['dog']::animal_whitelist[] = "whitelist" ;

-- Any rows where the animal_whitelist equals dog and cat
select * from animals where  array['dog', 'cat']::animal_whitelist[] = "whitelist" ;

-- Any rows where the animal_whitelist equals dog or cat
select * from animals where  array['dog', 'cat']::animal_whitelist[] <@ "whitelist" ;

-- Any rows where the animal_whitelist is not dog, cat, or bird
select * from animals where not array['dog', 'cat', 'bird']::animal_whitelist[] && "whitelist";

0
投票

我想我用更多的实验来解决这个问题

  1. SELECT * FROM animals WHERE whitelist @> ARRAY['dog'::whitelist]
  2. SELECT * FROM animals WHERE whitelist @> ARRAY['dog'::whitelist, 'cat'::whitelist] AND NOT whitelist @> ARRAY['bird'::whitelist]
  3. SELECT * FROM animals WHERE whitelist @> ARRAY['dog'::whitelist] OR whitelist @> ARRAY['cat'::whitelist]
  4. SELECT * FROM animals WHERE NOT whitelist @> ARRAY['dog'::whitelist, 'cat'::whitelist, 'bird'::whitelist]
© www.soinside.com 2019 - 2024. All rights reserved.