sql with语句查询 递归查询

发布时间 2023-04-19 17:55:10作者: 月习

with语句查询可以将一个子查询作为一个结果,相当于一个i临时表多次使用

WITH t1 AS (SELECT 1 AS id,'bird' AS cname) ,
t2 AS (SELECT 1 AS id,'123' AS info) 
SELECT t1.cname,t2.info FROM t1,t2 WHERE t1.id=t2.id;

t1和t2两个临时结果,后续查询可以使用。最后的查询也可以再连接其它的第三个表

WITH RECURSIVE递归查询

机构或部门或类型这种数型数据结构如果给定一个节点查询所有的子节点,包括子子节点。这个时候就用到递归查询。

with recursive temp_org
	as
	(
	     /**--1:初始查询*/
	     select t.id, t.name, t.pid from organ t where t.organ_no = '123'
	     union all
	     /**--2:递归条件*/
	     select m.id, m.name,m.pid from organ m inner join temp_org n on ( m.pid = n.id)
	)
	select  id,name from temp_org

with语法在常见数据库oracle,pg,mysql测试都可以使用,mysql 8.0以下不支持with语句。select version()检查当前数据库版本。oracle在递归查询不需要加recursive。