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

如何将指定的LEFT JOIN SQL查询改写为子查询形式?

改写为子查询形式的SQL
SELECT
    o.hash,
    o.index,
    o."timestamp" AS created_timestamp,
    -- 从i表获取消费时间,无匹配返回NULL
    (SELECT i."timestamp" FROM i WHERE i.spent_hash = o.hash AND i.spent_index = o.index) AS spent_timestamp,
    -- 从i表获取消费区块号,无匹配返回NULL
    (SELECT i.number FROM i WHERE i.spent_hash = o.hash AND i.spent_index = o.index) AS spent_number,
    o.number AS created_number,   
    o.value,
    -- 获取创建时的USD汇率
    (SELECT usd FROM blocks b WHERE b.number = o.number) AS created_usd,
    -- 获取消费时的USD汇率,无匹配返回NULL
    (SELECT usd FROM blocks b WHERE b.number = (SELECT i.number FROM i WHERE i.spent_hash = o.hash AND i.spent_index = o.index)) AS spent_usd
FROM 
    o

逻辑说明

这个查询和原LEFT JOIN版本的结果完全等价:

  • 原查询中LEFT JOIN i的匹配逻辑,被拆分为每个字段的相关子查询,当没有找到对应的i记录时,子查询会返回NULL,和LEFT JOIN的行为一致。
  • 最后一个关联blocks的子查询嵌套了一层,用来先获取对应i表的区块号,确保在没有匹配i记录时,该字段也返回NULL,和原逻辑保持一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 03:34:59