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

如何对比link_name列中两个资产ID对应的voltage值是否一致?

解决方案

假设存储link_name的表名为link_table,主资产表名为assets(包含asset_id和voltage字段),以下分主流数据库给出实现方式:

MySQL 实现

SELECT
  link_name,
  a1.asset_id AS asset_id1,
  a1.voltage AS voltage1,
  a2.asset_id AS asset_id2,
  a2.voltage AS voltage2,
  -- 浮点型电压需考虑精度误差,用差值判断近似匹配
  CASE 
    WHEN ABS(a1.voltage - a2.voltage) < 0.001 THEN '匹配' 
    ELSE '不匹配' 
  END AS match_result
FROM
  link_table
  -- 提取第一个资产ID并关联主表
  JOIN assets a1 
    ON a1.asset_id = CAST(SUBSTRING_INDEX(REPLACE(REPLACE(link_name, '(', ''), ')', ''), '_', 1) AS UNSIGNED)
  -- 提取第二个资产ID并关联主表
  JOIN assets a2 
    ON a2.asset_id = CAST(SUBSTRING_INDEX(REPLACE(REPLACE(link_name, '(', ''), ')', ''), '_', -1) AS UNSIGNED);

PostgreSQL 实现

SELECT
  link_name,
  a1.asset_id AS asset_id1,
  a1.voltage AS voltage1,
  a2.asset_id AS asset_id2,
  a2.voltage AS voltage2,
  CASE 
    WHEN ABS(a1.voltage - a2.voltage) < 0.001 THEN '匹配' 
    ELSE '不匹配' 
  END AS match_result
FROM
  link_table
  JOIN assets a1 
    ON a1.asset_id = CAST(split_part(regexp_replace(link_name, '[()]', '', 'g'), '_', 1) AS INTEGER)
  JOIN assets a2 
    ON a2.asset_id = CAST(split_part(regexp_replace(link_name, '[()]', '', 'g'), '_', 2) AS INTEGER);

关键说明

  • 先通过字符串函数清理link_name:移除括号,按下划线分割出两个资产ID;
  • 若资产ID是数字类型,需用CAST转换类型,避免字符串关联的性能损耗;
  • 若voltage是浮点型(如DECIMAL、FLOAT),禁止直接用=判断,建议通过差值绝对值小于极小值(如0.001)验证近似匹配,规避精度误差导致的误判;
  • 若存在资产ID不在主表的场景,可将JOIN改为LEFT JOIN,并在结果中标记缺失的资产。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 12:30:53