能否使用仅在查询生命周期内存在的临时表实现错误信息关联?
如何临时关联自定义错误信息表并合并查询结果?
问题描述
我通过查询得到了如下结果表:
+-------------+------------------+ | error_codes | number_of_orders | +-------------+------------------+ | 2066 | 104 | | 5092 | 642 | +-------------+------------------+
现在需要为每个错误码添加对应的错误信息,但不存在对应的错误信息实体表,希望创建一个仅在该查询执行期间存在的临时/虚拟表:
+-------------+------------------+ | error_codes | error_message | +-------------+------------------+ | 2066 | Tralalala | | 5092 | Ohje | +-------------+------------------+
希望借助唯一的error_codes作为关联键,最终得到包含错误码、订单数、错误信息的结果表,请问是否可以实现?
解决方案
可以实现,无需创建实体临时表,直接在查询中定义仅本次查询生效的错误信息映射关系,再与原查询结果关联即可。以下是不同数据库环境下的实现示例:
通用写法(适配多数数据库)
通过UNION ALL构建虚拟表,再与原始查询结果关联:
SELECT t.error_codes, t.number_of_orders, err.error_message FROM ( -- 替换为你生成原始结果的实际查询语句 SELECT 2066 AS error_codes, 104 AS number_of_orders UNION ALL SELECT 5092 AS error_codes, 642 AS number_of_orders ) t JOIN ( -- 临时定义错误码与信息的映射关系 SELECT 2066 AS error_codes, 'Tralalala' AS error_message UNION ALL SELECT 5092 AS error_codes, 'Ohje' AS error_message ) err ON t.error_codes = err.error_codes;
简洁写法(支持VALUES子句的数据库:PostgreSQL、SQL Server等)
利用VALUES子句快速构建虚拟表:
SELECT t.error_codes, t.number_of_orders, err.error_message FROM ( -- 替换为你生成原始结果的实际查询语句 SELECT 2066 AS error_codes, 104 AS number_of_orders UNION ALL SELECT 5092 AS error_codes, 642 AS number_of_orders ) t JOIN ( VALUES (2066, 'Tralalala'), (5092, 'Ohje') ) AS err(error_codes, error_message) ON t.error_codes = err.error_codes;
执行上述查询后,将得到合并后的目标结果:
+-------------+------------------+----------------+ | error_codes | number_of_orders | error_message | +-------------+------------------+----------------+ | 2066 | 104 | Tralalala | | 5092 | 642 | Ohje | +-------------+------------------+----------------+
核心逻辑是通过子查询或VALUES子句临时生成一个仅在当前查询生命周期内存在的虚拟映射表,再通过error_codes字段与原始查询结果做关联,从而完成数据合并。
内容的提问来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

