select count(1) from table where 1=1 start with connect by prior pgsql写法
时间: 2024-05-13 18:17:02 浏览: 105
在 PostgreSQL 中,可以使用 WITH RECURSIVE 子句来模拟 Oracle 中的 START WITH CONNECT BY 语法,示例代码如下所示:
```
WITH RECURSIVE cte AS (
SELECT *
FROM table
WHERE parent_id IS NULL -- START WITH
UNION
SELECT t.*
FROM table t
JOIN cte ON t.parent_id = cte.id -- CONNECT BY
)
SELECT COUNT(*) FROM cte;
```
在这个示例中,我们使用了一个递归公共表达式(CTE),其中首先选择根节点(parent_id IS NULL),然后通过连接每个节点的父节点来选择子节点(JOIN cte ON t.parent_id = cte.id)。最后,我们计算 cte 中的记录数。
相关问题
select distinct admin_sn from sys_dept where status = '0' and del_flag = '0' start with dept_id = (select dept_id from ( select * from sys_dept where status = '0' and del_flag = '0' start with dept_id = '100' CONNECT BY PRIOR parent_id = dept_id and dept_id != parent_id) where parent_id = '0') connect by prior dept_id = parent_id and dept_id != parent_id 改成mysql写法
SELECT DISTINCT admin_sn FROM sys_dept WHERE status = 0 AND del_flag = 0 START WITH dept_id = (SELECT dept_id FROM (SELECT * FROM sys_dept WHERE status = 0 AND del_flag = 0 START WITH dept_id = 100 CONNECT BY PRIOR parent_id = dept_id AND dept_id != parent_id) WHERE parent_id = 0) CONNECT BY PRIOR dept_id = parent_id AND dept_id != parent_id;
select COMPID from BASIC_ORGANIZATION start with COMPID ='0302' connect by prior COMPID = PMANAGECOMPID 在mysql环境下运行有什么问题
在MySQL环境下,使用START WITH和CONNECT BY子句进行递归查询可能会遇到以下问题:
1. 语法不支持:MySQL的标准SQL语法中不支持START WITH和CONNECT BY子句,这是Oracle数据库特有的语法。在MySQL中,要实现递归查询可以使用其他方法,如使用递归CTE(Common Table Expressions)或存储过程等。
2. 循环引用:如果在递归查询中存在循环引用,即某个节点的父节点是它的子孙节点之一,那么查询可能会导致无限循环,最终导致查询失败或性能问题。
3. 性能问题:即使在没有循环引用的情况下,使用递归查询可能也会导致性能问题。递归查询需要对每一层级进行逐层扫描和连接操作,对于大型数据集或深度嵌套的层级结构,查询的性能可能会受到影响。
因此,在MySQL环境下执行上述查询可能会遇到语法不支持和性能问题。如果需要实现类似的递归查询功能,建议考虑使用其他方法或调整数据模型来避免递归查询的需求。
阅读全文