SQL server自交叉连接可以联结同一个表的多个实例,此功能称为自联结,并被所有基本联结类型支持(交叉联结、内部联结和外部联结)。例如,一下代码在Employees表的两个实例间执行一个自联结。
select
E1.empid,E1.firstname,E1.lastname,
E2.empid,E2.firstname,E2.lastname
from HR.Employees as E1
CROSS JOIN HR.Employees AS E2;
此查询会生成雇员配对的所有可能组合。由于Employees表中有9行,此处查询返回81行。
其实实际运用场景当中,大多数是用于组成树,最常见的就是部门树,一般来说部门树的结构会是这个样子。
create table department
(
id int primary key identity,
name nvarchar(50),
lastid int
)
如果我想查出一棵部门树的话如何用自交叉联结来完成呢,用以下SQL就好,sqlserver当中也可以用cte来完成,mysql的话我暂时是用下面这种方式。
select d1.id,d2.name,d1.name as lastname from department d1,
cross join department d2
where d1.id = d2.lastid
如果要查某一个部门id的子树加一个id=”的条件就好了,如果要查下级部门树的话把d1,d2顺序对调一下即可。
SQLserver 自交叉连接于常用场景
最新推荐文章于 2023-12-11 15:43:15 发布