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

Firebird SQL多表关联查询:替换PointID为对应pointName

Firebird SQL 关联查询替换点ID为点名称

我几乎没接触过SQL,现在内部硬件的测试数据存在Firebird SQL数据库里,已经理清了数据结构,目前用下面的SQL获取指定testID的记录:

SELECT *
FROM RESULTS r
JOIN RECORDS re on ((r.testID  = re.testID) 
AND (r.runID = re.runID)
AND (r.resultID = re.resultID))

现在需要把记录里的startPointID和endPointID替换成对应的pointName,关联逻辑如下:

  • 根据testID和startConnectionIndex/endConnectionIndex在Connection表中查询connectionID;
  • 再根据testID、connectionID和startPointID/endPointID在Point表中获取对应的pointName。

期望最终输出包含testID、runID、resultID、recordedValue、endPointID、endPointName等字段,示例如下:

testIDrunIDresultIDrecordedValue...endPointIDendPointName
100113value1...p-1Point A
100113value2...p-2Point B

涉及的表结构:

  • Results表:包含testID、runID、resultID字段;
  • Records表:包含testID、runID、resultID、recordedValue、startConnectionIndex、startPointID、endConnectionIndex、endPointID字段;
  • Connection表:包含testID、connectionIndex、connectionID字段;
  • Point表:包含testID、pointID、connectionID、pointName字段。

最终SQL语句

SELECT
    r.testID,
    r.runID,
    r.resultID,
    re.recordedValue,
    -- 保留原ID字段,同时添加对应的名称
    re.startPointID,
    start_point.pointName AS startPointName,
    re.endPointID,
    end_point.pointName AS endPointName
    -- 如需其他字段,可在此添加,比如 re.xxx
FROM RESULTS r
JOIN RECORDS re 
    ON r.testID = re.testID 
    AND r.runID = re.runID 
    AND r.resultID = re.resultID
-- 关联获取startConnection对应的connectionID,再关联Point表拿startPointName
LEFT JOIN Connection start_conn
    ON re.testID = start_conn.testID 
    AND re.startConnectionIndex = start_conn.connectionIndex
LEFT JOIN Point start_point
    ON re.testID = start_point.testID 
    AND start_conn.connectionID = start_point.connectionID 
    AND re.startPointID = start_point.pointID
-- 关联获取endConnection对应的connectionID,再关联Point表拿endPointName
LEFT JOIN Connection end_conn
    ON re.testID = end_conn.testID 
    AND re.endConnectionIndex = end_conn.connectionIndex
LEFT JOIN Point end_point
    ON re.testID = end_point.testID 
    AND end_conn.connectionID = end_point.connectionID 
    AND re.endPointID = end_point.pointID
-- 如需指定testID,添加WHERE条件
-- WHERE r.testID = '你的测试ID'

说明

  1. 使用LEFT JOIN而非INNER JOIN,避免因为某个连接或点不存在导致整条记录丢失;
  2. 分别对start和end的连接、点进行两次关联,确保各自的名称正确匹配;
  3. 保留了原startPointID和endPointID字段,同时添加了对应的startPointName和endPointName;
  4. 如果需要筛选特定testID,取消最后一行WHERE注释并填入对应ID即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 01:40:20