Postgresql

postgres 簡單數字到字元串的映射

  • December 20, 2019

Enum在程式語言級別有一個,它作為一個簡單的整數儲存在表上。思考:

APPLE = 1
GOOGLE = 2
MSFT = 3
AMAZON = 4
... (100s more)

我只想查詢表,而不是數字返回相應的字元串值。有沒有更簡單的方法可以在不使用case語句或臨時表的情況下執行此操作:

SELECT
 CASE WHEN type = 1 THEN "APPLE"
 CASE WHEN type = 2 THEN "GOOGLE"
 CASE WHEN type = 3 THEN "MSFT"
 CASE WHEN type = 4 THEN "AMAZON"
 ...
 ELSE "UNKNOWN"
FROM t

基本上,它只是字典中的鍵查找。

恕我直言,最簡單的方法是使用查找表。

create table lk (id int, name text);

insert into lk values
(1, 'apple'),(2, 'google'),(3, 'msft'),(4, 'amazon');

create table t (id serial, lk int);
insert into t (lk) values (2),(1),(3),(4);

select
   t.id,
   lk.name
from   t
join   lk
      on lk.id = t.lk;
編號 | 姓名 
-: | :-----
 2 | 蘋果
 1 | Google
 3 | 微軟 
 4 | 亞馬遜

db<>在這裡擺弄

好吧,使用@McNets 的回答我使用with了沒有臨時表的子句:

create table t (id serial, lk int);
insert into t (lk) values (2),(1),(3),(4);

with m (k, v) as (values (1, 'apple'),(2, 'google'),(3, 'msft'),(4, 'amazon'))
select t.id, m.v
from t
join m
 on m.k = t.lk;

引用自:https://dba.stackexchange.com/questions/226294