2013-04-04 13 views
8

Chcę wybrać z enumaracji, która nie znajduje się w bazie danych.Wybierz wartość z listy wyliczeniowej w PostgreSQL

E.g. SELECT id FROM my_table zwraca wartości takie jak 1, 2, 3 Chcę wyświetlić 1 -> 'chocolate', 2 -> 'coconut', 3 -> 'pizza' itp. SELECT CASE działa, ale jest zbyt skomplikowany i trudny do przeglądu dla wielu wartości. Myślę o czymś takim, jak Ale nie mogłem odnieść sukcesu z tablicami. Czy istnieje proste rozwiązanie? Jest to proste zapytanie, a nie skrypt plpgsql lub coś podobnego.

Odpowiedz

0

A co z tworzeniem kolejnej tabeli, która wylicza wszystkie przypadki, i dołączać?

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

i po wybraniu z tabeli:

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; 

lub bez CTE (ale stosując ten sam pomysł):

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

jest to poprawna składnia:

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

Powinieneś jednak utworzyć odwołanie do tabeli z tymi wartościami.

+0

Dziękujemy! To jest proste rozwiązanie, którego szukałem i działa. Brakowało tylko nawiasów. (Powiedziałem kiedyś, że nie chcę tworzyć tabeli, ponieważ baza danych nie jest moja i jest to zwykłe zapytanie, ale ktoś usunął tę odpowiedź za pomocą mojego komentarza.) – Turtle

Powiązane problemy