SQLserver 自交叉连接于常用场景

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顺序对调一下即可。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值