您的位置:首页 > 数据库

SQLserver 自交叉连接于常用场景

2018-02-25 22:32 295 查看
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顺序对调一下即可。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: