从 PostgreSQL 的枚举列表中选择值

Posted

技术标签:

【中文标题】从 PostgreSQL 的枚举列表中选择值【英文标题】:Select value from an enumerated list in PostgreSQL 【发布时间】:2013-04-04 14:35:37 【问题描述】:

我想从不在数据库中的枚举中进行选择。

例如SELECT id FROM my_table 返回值 1、2、3 我想显示1 -> 'chocolate', 2 -> 'coconut', 3 -> 'pizza' 等。SELECT CASE 有效,但对于许多值来说太复杂且难以概述。我想到了类似的东西

SELECT id, array['chocolate','coconut','pizza'][id] FROM my_table

但我无法使用数组成功。有简单的解决方案吗?所以这是一个简单的查询,而不是 plpgsql 脚本或类似的东西。

【问题讨论】:

【参考方案1】:
with food (fid, name) as (
  values 
     (1, 'chocolate'),
     (2, 'coconut'),
     (3, 'pizza')
)
select t.id, f.name
from my_table t
  join food f on f.fid = t.id;

或没有 CTE(但使用相同的想法):

select t.id, f.name
from my_table t
  join (
     values 
       (1, 'chocolate'),
       (2, 'coconut'),
       (3, 'pizza')
  ) f (fid, name) on f.fid = t.id;

【讨论】:

【参考方案2】:

这是正确的语法:

SELECT id, (array['chocolate','coconut','pizza'])[id] FROM my_table

但是您应该使用这些值创建一个引用表。

【讨论】:

谢谢!!!这是我一直在寻找的简单解决方案并且它有效。只是缺少括号。 (我曾经说过我不想创建表,因为数据库不是我的,这是一个随意的查询,但有人用我的评论删除了这个答案。)【参考方案3】:

如何创建另一个表来枚举所有案例并进行连接?

CREATE TABLE table_case
(
  case_id bigserial NOT NULL,
  case_name character varying,
  CONSTRAINT table_case_pkey PRIMARY KEY (case_id)
)
WITH (
  OIDS=FALSE
);

当您从表格中选择时:

SELECT id, case_name FROM my_table 
inner join table_case on case_id=my_table_id;

【讨论】:

以上是关于从 PostgreSQL 的枚举列表中选择值的主要内容,如果未能解决你的问题,请参考以下文章

如何从 PostgreSQL 的子查询中选择包含值数组的列?

从列表中过滤为查询字符串 postgresql flask sqlalchemy [重复]

从 postgresql 数据库中选择值并根据我需要完整查询插入/更新

如何在 C# 中为枚举值添加描述以与 ASP.NET MVC 中的下拉列表一起使用? [复制]

如何将具有自定义枚举类型的数据从 csv 插入现有的 PostgreSQL 表

如何在 .net 核心上使用 ef 核心在 postgresql(db first)中映射枚举