(SQL / PostgreSQL)在查询中,如何使用另一个表作为查找将字段的值转换为更易读的值?

我有
postgresql表,其值如下:

Table region_data:

region_name | population | region_code
------------+------------+-------------
Region 1    | 120000     | A
Region 2    | 200000     | A
Region 3    | -1         | B
Region 4    | -2         | -1

某些数据可能不可用的地方(即-1和-2值)

包含这些值的翻译的表格:

Table data_codes:

code  | meaning
------+-----------------------
-1    | 'Data not available'
-2    | 'Insufficient data'
...

Table region_types:

type  | meaning
------+---------------
A     | Mountain
B     | Grassland
...

我想创建一个查询(实际上是一个视图),它返回data_code和region_types表提供的人类可读的翻译.例如,视图将返回:

Region Name | Population         | Region Type
------------+--------------------+-------------
Region 1    | 120000             | Mountain
Region 2    | 200000             | Mountain
Region 3    | Data Not Available | Grassland
Region 4    | Insufficient Data  | Data Not Available

我尝试过做一些子查询,但是它们返回了很多重复的行,其中代码与data_code表中的任何内容都不匹配.

请帮忙?谢谢!

最佳答案 假设数据代码和区域代码之间没有冲突,那么我看到了两个挑战.一个是填充列上的数据类型问题(值是整数,但数据含义需要字符串).另一种是将区域代码与数据代码组合:

select rd.region_name,
       (case when population >= 0 cast(population as varchar(255))
             else p.meaning
        end) as population,
       r.meaning
from region_data rd left outer join
     (select type, meaning from region_types
      union all
      select code, meaning from data_codes
     ) r
     on rd.region_code = r.type left outer join
     data_codes p
     on rd.population < 0 and rd.population = p.code;
点赞