2013-04-04 48 views
8

'de listelenen listeden bir değer seçin Veritabanında olmayan bir numaralama seçmek istiyorum.PostgreSQL

E.g. SELECT id FROM my_table, 1, 2, 3 gibi değerleri döndürür 1 -> 'chocolate', 2 -> 'coconut', 3 -> 'pizza' vb. Görüntülemek istiyorum ama çok karmaşık ve çok sayıda değer için genel bakış açısından zor. Ben

Ben bir şey düşünemiyorum. Kolay bir çözüm var mı? Yani bu basit bir sorgu, bir plpgsql betiği ya da bunun gibi bir şey değil.

cevap

0

Tüm vakaları numaralandıran ve katıldığınız başka bir tablo oluşturmaya ne dersiniz?

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

ve size tablodan seçtiğinizde:

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; 

veya CTE olmadan

SELECT id, case_name FROM my_table 
inner join table_case on case_id=my_table_id; 
(ama aynı fikri kullanarak):

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

Bu doğru sözdizimi şöyledir:

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

Ancak, bu değerlere sahip başvurulan bir tablo oluşturmanız gerekir.

+0

Teşekkür ederiz! Bu aradığım basit çözüm ve işe yarıyor. Sadece parantez eksikti. (Bir keresinde bir tablo oluşturmak istemediğimi, çünkü veritabanı benimki olmadığından ve bu sıradan bir sorgulama olduğunu daha önce söyledim, ama birisi bu cevabı yorumla sildim.) – Turtle