从PostgreSQL中的枚举列表中选择值

Tur*_*tle 9 postgresql postgresql-8.1

我想从不在数据库中的enumaration中进行选择.

例如,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
Run Code Online (Sandbox Code Playgroud)

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

a_h*_*ame 9

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;
Run Code Online (Sandbox Code Playgroud)

或没有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;
Run Code Online (Sandbox Code Playgroud)


Hou*_*ari 0

创建另一个表来枚举所有案例并执行 join 怎么样?

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

当您从表中选择时:

SELECT id, case_name FROM my_table 
inner join table_case on case_id=my_table_id;
Run Code Online (Sandbox Code Playgroud)