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

BST节点类型识别SQL查询报错:子查询返回多行值求排查

解决BST节点类型查询中的“子查询返回多行”错误

问题类型判定

这是逻辑错误,核心问题是你在CASE语句中错误使用了返回多行结果的子查询,不符合SQL中表达式只能接收单值的要求。

错误原因分析

你原查询中的(SELECT Node FROM BST)和(SELECT Parent FROM BST)会返回整个表的所有Node/Parent值(多行数据),但NOT IN左侧需要的是当前行的单个Node值,数据库无法将集合与集合做这种单值比较逻辑,因此抛出错误。

修正后的查询语句

SELECT
    Node,
    CASE
        WHEN Parent IS NULL THEN 'Root'
        WHEN Node NOT IN (SELECT Parent FROM BST WHERE Parent IS NOT NULL) THEN 'Leaf'
        ELSE 'Inner'
    END AS NodeType
FROM
    BST
ORDER BY Node;

代码说明

  1. Root节点:直接判断Parent IS NULL,与原逻辑一致。
  2. Leaf节点:当前Node不在所有非空Parent的集合中,说明该节点没有子节点,属于叶子节点。
  3. Inner节点:排除Root和Leaf的节点,自然就是存在子节点的内部节点。

验证结果

执行修正后的语句会得到你预期的结果:

1 Leaf
2 Inner 
3 Leaf
5 Root
6 Leaf
8 Inner
9 Leaf

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 13:08:16