select tb.*,level 层级 from tb start with id=18 select tb.*,level 层级 from tb start with id=18 connect by prior pid = id; 改错
时间: 2023-06-20 10:05:55 浏览: 186
这两个 SQL 语句分别存在以下问题:
1. 第一条 SQL 语句缺少连接条件,无法正常执行;
2. 第二条 SQL 语句的语法错误,应该使用 `START WITH` 和 `CONNECT BY` 两个关键词来指定递归查询的起始条件和递归条件。
下面是针对这两个问题的解决方案:
1. 为第一条 SQL 语句添加连接条件,例如:
```sql
SELECT tb.*, level AS 层级
FROM tb
JOIN (SELECT MAX(id) AS max_id FROM tb) max_tb
START WITH id = 18 AND tb.id = max_tb.max_id
CONNECT BY PRIOR pid = id;
```
在这个 SQL 语句中,我们从 `tb` 表中找出 `id` 最大的记录,然后以此为连接条件,来限制递归查询的结果集。
2. 修正第二条 SQL 语句的语法错误,例如:
```sql
SELECT tb.*, level AS 层级
FROM tb
START WITH id = 18
CONNECT BY PRIOR id = pid;
```
在这个 SQL 语句中,我们使用 `START WITH` 指定起始条件,使用 `CONNECT BY` 指定递归条件,来递归查询 `tb` 表中与 `id` 为 18 的记录相关联的所有记录,并且在结果集中添加一个名为 `层级` 的列,表示每个记录所在的递归层级。
阅读全文