我在Postgresql中使用枚举。我在数据库中使用了一个名为city的枚举。我的要求是如何使用条件语句获取枚举。 我使用了查询
SELECT 'Bengaluru'::CITY as TEXT
它可以正常工作,但如果在枚举中找不到该文本,则会引发错误。我应该如何进行/更改sql查询,以便它不会引发错误。
答案 0 :(得分:1)
您需要检查系统表。 假设一个枚举定义为:
create type city as enum ('Munich', 'Berlin');
要了解是否为枚举类型定义了特定的标签,可以使用以下命令:
select exists (select *
from pg_enum e
join pg_type t on t.oid = e.enumtypid
join pg_namespace s on s.oid = t.typnamespace
where s.nspname = 'public' --<< adjust here for the correct schema
and t.typname = 'city'
and e.enumlabel = 'Bengaluru');
正确的解决方案是不使用枚举,而是使用正确的一对多关系。
create table city
(
id integer primary key,
name varchar(100) not null unique --<< the "unique" mimics the enuma
);
insert into city (id, name)
values (1, 'Munich'), (2, 'Berlin');
要使用“枚举”,请使用外键:
create table some_table_using_city
(
... other columns ...
city_id integer references city
);
要检查城市名称是否存在,只需使用:
select id
from city
where name = 'Bengaluru';
答案 1 :(得分:0)
SELECT
CASE WHEN 'Bengaluru'::CITY !=NULL THEN 'Bengaluru'::CITY ELSE "Not Found"
END as TEXT
CASE
可以在这里使用。
有关语法的更多详细信息,您可以找到here.