patternsqlMinor
postgres simple number to string mapping
Viewed 0 times
numbersimplepostgresmappingstring
Problem
I have a an
I just wanna query the table and instead of the number return the corresponding string value. Is there an easier way of doing this without using
Basically it's just a key look-up in a dictionary.
Enum at the programming language level which is stored as a simple integer on the table. Think:APPLE = 1
GOOGLE = 2
MSFT = 3
AMAZON = 4
... (100s more)I just wanna query the table and instead of the number return the corresponding string value. Is there an easier way of doing this without using
case statement or a temp table: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 tBasically it's just a key look-up in a dictionary.
Solution
IMHO the easiest way is by using a lookup table.
id | name
-: | :-----
2 | apple
1 | google
3 | msft
4 | amazon
db<>fiddle here
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;id | name
-: | :-----
2 | apple
1 | google
3 | msft
4 | amazon
db<>fiddle here
Code Snippets
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;Context
StackExchange Database Administrators Q#226294, answer score: 8
Revisions (0)
No revisions yet.