2013-04-04 76 views
8

我想從不在數據庫中的enumaration中進行選擇。從PostgreSQL的枚舉列表中選擇值

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腳本或類似的東西。

回答

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; 
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; 
3

這是正確的語法:

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

但是你應該用這些值創建一個引用表。

+0

謝謝!這是我正在尋找的簡單解決方案,它的工作原理。只是括號丟失了。 (我已經告訴過一次我不想創建表格,因爲數據庫不是我的,這是一個隨便的查詢,但有人用我的評論刪除了這個答案。) – Turtle 2013-04-05 08:50:30