在 H2 上使用 CTE 查询未找到列

Posted

技术标签:

【中文标题】在 H2 上使用 CTE 查询未找到列【英文标题】:Column not found with CTE query on H2 【发布时间】:2021-06-24 08:18:06 【问题描述】:

我正在尝试了解 cte 的工作原理,但无法解决未找到列的错误。

这是我的桌子:

CREATE TABLE IF NOT EXISTS NODE (UUID VARCHAR NOT NULL, PARENT_UUID VARCHAR NULL,
NAME VARCHAR NOT NULL, PRIMARY KEY (UUID));

这是我的查询:

WITH tree AS
(
    -- Anchor member
    SELECT * FROM node WHERE uuid = ''
    UNION ALL
    -- Recursive member that references expression_name.
    SELECT a.uuid, a.parent_uuid, a.name FROM node a
    INNER JOIN tree b ON b.parent_uuid = a.uuid
)
-- references expression name
SELECT * FROM tree;

这就是我得到的:Column "B.PARENT_UUID" not found。谁能帮帮我?

【问题讨论】:

除了语法错误之外,您的 CTE 可能存在逻辑错误(取决于您要执行的操作)。您当前的逻辑似乎在层次结构中上升。这是你打算在这里做的吗? 【参考方案1】:

您的递归 CTE 可能略有偏差。考虑这个版本:

WITH RECURSIVE tree (uuid, parent_uuid, name) AS (
    SELECT uuid, parent_uuid, name FROM node WHERE uuid = ''
    UNION ALL
    SELECT a.uuid, a.parent_uuid, a.name
    FROM node a
    INNER JOIN tree b ON b.parent_uuid = a.uuid
)

SELECT * FROM tree;

【讨论】:

你能说我如何不仅获得所选节点的父母,而且还获得父母的所有兄弟姐妹?还是我应该再问一个问题? @Shtirlits 也许再问一个问题,这次使用正确的语法,并包含解释您正在尝试做什么的示例数据。 我打开了一个新问题并使用插入***.com/questions/68112725/…提供了测试数据

以上是关于在 H2 上使用 CTE 查询未找到列的主要内容,如果未能解决你的问题,请参考以下文章

org.h2.jdbc.JdbcSQLException:在使用 H2 数据库进行测试期间未找到列“Id”

使用 H2 中 CTE 的结果集进行更新

H2 列名选择返回不正确的列名; “未找到列“OUT_ID”;SQL 语句:”

H2 数据库:在 CTE 中使用窗口函数时出错

使用 CTE 为主查询选择列

无法计算 CTE 子查询输出之间的差异以用于更大的 PostgreSQL 查询输出列