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

时间:2013-04-04 14:35:38

标签: postgresql postgresql-8.1

我想从不在数据库中的输入中进行选择。

E.g。 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脚本或类似的东西。

3 个答案:

答案 0 :(得分:8)

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;

答案 1 :(得分:3)

这是正确的语法:

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

但是你应该创建一个带有这些值的引用表。

答案 2 :(得分:0)

如何创建另一个枚举所有案例的表,并加入?

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;