如何在不修改原表的情况下通过SQL查询替换列值
实现查询时替换列值(不修改原表)
可以通过左连接(LEFT JOIN)结合COALESCE函数实现需求:关联translation表获取对应翻译值,若没有匹配的翻译则保留原表数据,全程不会改动cities表的原始数据。
示例SQL查询
SELECT c.Id, COALESCE(t_name.value, c.name) AS name, COALESCE(t_timezone.value, c.timezone) AS timezone FROM cities c LEFT JOIN translation t_name ON c.Id = t_name.reference_id AND t_name.field = 'name' LEFT JOIN translation t_timezone ON c.Id = t_timezone.reference_id AND t_timezone.field = 'timezone';
代码说明
- 对translation表做两次左连接,分别匹配
name和timezone字段的翻译记录 COALESCE函数会优先返回第一个非空值:如果找到对应翻译就用translation.value,否则用原表cities的列值- 左连接保证即使没有翻译记录(比如Id=1的Paris),也能保留原表的完整行数据
查询结果
| Id | name | timezone |
|---|---|---|
| 1 | Paris | CET |
| 2 | パリ | タイムゾーン |
内容的提问来源于stack exchange,提问作者Ahmed Al Tayeh
相关产品推荐
相关产品推荐

