WITH RECURSIVE category_tree AS ( SELECT id, name, parent_id, 0 AS level FROM categories WHERE parent_id IS NULL UNION ALL SELECT c.id, c.name, c.parent_id, ct.level + 1 FROM categories c JOIN category_tree ct ON c.parent_id = ct.id)SELECT * FROM category_tree; RECURSIVE报错语法错误
时间: 2024-02-16 12:05:08 浏览: 129
根据您提供的代码片段,出现语法错误的可能原因是在使用WITH RECURSIVE时,前面的查询子句中没有使用逗号分隔不同的SELECT语句,导致解析出错。您可以尝试将两个SELECT语句用逗号分隔开来,如下所示:
```
WITH RECURSIVE category_tree AS (
SELECT id, name, parent_id, 0 AS level
FROM categories
WHERE parent_id IS NULL
UNION ALL
SELECT c.id, c.name, c.parent_id, ct.level + 1
FROM categories c
JOIN category_tree ct ON c.parent_id = ct.id
)
SELECT * FROM category_tree;
```
这应该可以解决语法错误问题。如果还有其他问题,请提供具体的错误信息,以便我更准确地帮助您解决问题。
相关问题
WITH RECURSIVE sub_nodes AS ( SELECT reason, parent_reason_id FROM reason_dict WHERE reason_id = 1 UNION ALL SELECT tt.reason, tt.parent_reason_id FROM tree_table tt INNER JOIN sub_nodes sn ON tt.parent_reason_id = sn.reason_id SELECT reason_id FROM sub_nodes;使用上述方法报错
根据您提供的查询代码,我注意到有一个错误。在第二个SELECT语句中,您使用了错误的表名 `tree_table`,而实际上应该使用 `reason_dict` 表来进行递归查询。请尝试以下修正后的查询代码:
```sql
WITH RECURSIVE sub_nodes AS (
SELECT reason, parent_reason_id
FROM reason_dict
WHERE reason_id = 1
UNION ALL
SELECT tt.reason, tt.parent_reason_id
FROM reason_dict tt
INNER JOIN sub_nodes sn ON tt.reason_id = sn.parent_reason_id
)
SELECT reason_id
FROM sub_nodes;
```
请注意,我假设您的 `reason_dict` 表包含名为 `reason_id`、`reason` 和 `parent_reason_id` 的列,其中 `reason_id` 是节点ID,`reason` 是节点名称,`parent_reason_id` 是父节点ID。请根据您的实际表结构进行相应的调整。
如果您仍然遇到问题,请提供更多关于表结构和错误信息的详细信息,以便我更好地帮助您解决问题。
WITH RECURSIVE recursion_dept(org_id, org_name, parent_id) AS ( SELECT org_id, org_name, parent_id FROM sys_org WHERE org_id = '2036E40E9EC74214A3434FFAB2038A62' UNION ALL SELECT o.org_id, o.org_name, o.parent_id FROM sys_org o INNER JOIN recursion_dept rd ON o.parent_id = rd.org_id ) SELECT org_id, org_name, parent_id FROM recursion_dept;
这是一段使用SQL语言编写的递归查询语句,用于查询指定机构ID下的所有子机构。具体来说,这个查询语句包括以下几个部分:
1. `WITH RECURSIVE`: 这是SQL中定义递归查询的关键字,用于指定递归查询的开始。
2. `recursion_dept(org_id, org_name, parent_id) AS`: 这个子句定义了递归查询的初始查询,其中`recursion_dept`是递归查询的临时表名称,`org_id`、`org_name`和`parent_id`是查询结果中的列名。
3. `SELECT org_id, org_name, parent_id FROM recursion_dept`: 这是递归查询的最终结果,用于从递归查询的结果集中选择所需的列。
4. `FROM sys_org`: 这个子句指定了递归查询的数据来源表。
5. `WHERE org_id = '2036E40E9EC74214A3434FFAB2038A62'`: 这个子句指定了递归查询的开始条件,即查询指定机构ID的子机构。
6. `UNION ALL`: 这个操作符用于将不同的查询结果集合并在一起。
7. `SELECT o.org_id, o.org_name, o.parent_id`: 这个子句是递归查询的递归部分,用于查询每个父机构的子机构。
8. `INNER JOIN recursion_dept rd ON o.parent_id = rd.org_id`: 这个子句用于将子机构和父机构进行连接,以便查询每个父机构的子机构。
总的来说,这个SQL查询语句是一个比较典型的递归查询语句,用于查询指定机构ID下的所有子机构,并返回它们的ID、名称和父级ID。
阅读全文