从 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 中的下拉列表一起使用? [复制]