You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PostgreSQL如何对数据类型不同的列执行两表关联操作

问题核心原因

你当前的报错和关联失效有两个核心原因:

  1. 关联时直接将varchar类型的metric_type_id与bigint类型的function_id进行匹配,metric_type_id中的非数字值会触发类型转换异常
  2. 你代码中写的CASE转换得到的id_m字段,并没有实际用到关联逻辑中
推荐解决方案

优先选择将function_id转为文本进行匹配的方案,不需要额外做正则校验和类型转换,性能更高且不会触发转换报错:

SELECT 
    lin.metric_name,
    lin.metric_type,
    lin.metric_value,
    func.function_name
FROM "LIN_Main_Followers" lin
LEFT JOIN "LIN_MD_Functions" func 
    ON lin.metric_type = 'function' -- 仅让function类型的行参与关联
    AND lin.metric_type_id = func.function_id::text -- 把bigint类型的function_id转为文本,和varchar的metric_type_id匹配
WHERE lin.metric_type = 'function'; -- 若只需要返回function类型的结果,增加该行过滤即可

如果你确实需要将metric_type_id转为数值类型再关联,可以使用如下写法,先通过正则校验确保是纯数字后再做类型转换:

SELECT 
    lin.metric_name,
    lin.metric_type,
    lin.metric_value,
    func.function_name
FROM "LIN_Main_Followers" lin
LEFT JOIN "LIN_MD_Functions" func 
    ON lin.metric_type = 'function'
    AND lin.metric_type_id ~ '^\d+$' -- 仅匹配纯数字的metric_type_id
    AND lin.metric_type_id::integer = func.function_id
WHERE lin.metric_type = 'function';

两种写法执行后都会得到你需要的预期结果。


内容的提问来源于stack exchange,提问作者Anna

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 06:09:03