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

如何关联同表两个为NULL的值 实现两张表的直接JOIN查询

解决方案

实现思路

你的核心需求是将子节点s_sym行和父节点存储的r_id关联,只需要先对存储s_sym、parent的表做自连接(多层级父子关系可改用递归CTE),把父节点的r_id传递给对应子节点,再用传递后的r_id关联第二张业务表即可。

以下示例中我们将存储s_sym、parent、r_id的表命名为symbol_table,存储r_id、gross的表命名为revenue_table。

单层级父子关系查询代码

如果你的父子关系只有一层(即父节点本身就是根节点,直接存储r_id),直接用自连接即可:

SELECT 
  parent_t.r_id,
  child_t.s_sym,
  child_t.parent,
  rev.gross
FROM symbol_table child_t
-- 自关联匹配子节点对应的父节点行,拿到父节点的r_id
LEFT JOIN symbol_table parent_t 
  ON child_t.parent = parent_t.s_sym
-- 用父节点的r_id关联业务表获取gross数据
LEFT JOIN revenue_table rev
  ON parent_t.r_id = rev.r_id
-- 可根据需求调整过滤条件,不加过滤会返回所有子节点行
WHERE child_t.s_sym = 'aaaa.BW';

多层级父子关系兼容方案

如果存在多级父子嵌套(比如A的父节点是B,B的父节点是C,只有C存储r_id),可以用递归CTE拉平整个层级树,把根节点的r_id传递到所有子节点:

WITH RECURSIVE symbol_hierarchy AS (
  -- 递归起始:查询所有根节点(parent为NULL,存储r_id的行)
  SELECT s_sym, parent, r_id
  FROM symbol_table
  WHERE parent IS NULL
  UNION ALL
  -- 递归迭代:关联子节点,继承父节点的r_id
  SELECT c.s_sym, c.parent, p.r_id
  FROM symbol_table c
  JOIN symbol_hierarchy p ON c.parent = p.s_sym
)
SELECT 
  sh.r_id,
  sh.s_sym,
  sh.parent,
  rev.gross
FROM symbol_hierarchy sh
LEFT JOIN revenue_table rev ON sh.r_id = rev.r_id;

该方案支持任意层级的父子关系,无需调整代码即可适配所有节点的r_id关联需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 12:57:03