2013-04-04 10 views
8

データベースにない列挙体から選択したいと思います。PostgreSQLの列挙リストから値を選択

など。 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

関連する問題