postgresql 替换SQL查询中的列值而不更新原始表

twh00eeo  于 2022-12-23  发布在  PostgreSQL
关注(0)|答案(1)|浏览(301)

我正在寻找一种在选择查询时更改列值而不修改原始表中的数据的方法
我有一个cities
| 身份证|姓名|时区|
| - ------| - ------| - ------|
| 1个|巴黎|大学英语|
| 第二章|东京|日本科学技术大学|
我还有一个translation
| 参考标识|场|价值|
| - ------| - ------| - ------|
| 第二章|"姓名"|特尔|
| 第二章|"时区"|タイムゾーン|
其中reference_idcities表中的idfieldcities表中的列名,value是翻译文本
我需要一个用translation.value where translation.field = cities.column_name交换列值的查询

    • 不更新城市表**

我希望结果会像这样
| 身份证|姓名|时区|
| - ------| - ------| - ------|
| 1个|巴黎|大学英语|
| 第二章|特尔|タイムゾーン|

62lalag4

62lalag41#

可以使用外部联接:

select c.id, 
       coalesce(n.value, c.name) as name,
       coalesce(tz.value, c.timezone) as timezone
from cities c
  left join translation n on c.id = n.reference_id and n.field = 'name'
  left join translation tz on c.id = tz.reference_id and tz.field = 'timezone';

如果您非常需要,可以将其放入视图中。

相关问题