请教一个数据查询的问题

liveths 2013-03-15 06:46:58
现在有数据如下:
Department (部门表)部门表这个表采用树形结构
GuidCode DepName ParentGuid
1 总部 0
2 分部1 1
3 分部2 1
4 分部3 2
5 分部4 2
6 分部5 3
7 分部6 3




Users(员工表) (本字段和上面的部门表关联,表示员工所属部门)
GuidCode UserName DepartmentGuid
0 老大 1
1 小一 3
2 小二 3
3 小三 2
4 小四 2
5 小五 6
6 小刘 6


Orders(订单表) (本字段和上面的员工表关联,表示这样订单的生成员工是谁)
GuidCode OrderName UserGuid
0 订单1 1
1 订单2 1
2 订单3 1
3 订单4 1
4 订单5 2
5 订单6 2
6 订单7 4
7 订单8 1
8 订单9 5
9 订单10 5
10 订单11 1
11 订单12 6
12 订单13 6
13 订单14 1
14 订单15 2
15 订单16 3
16 订单17 3
17 订单18 3

现在我想查询,总部和分部2的所有订单?
请问如何用简洁高效的查询方式获取呢?
这个关联查询应该如何写呢?是高效的简洁的呢?
我考虑过用In,不过一旦树形结构下的分支多的话就会影响性能了。
例如是:我查询广东分部的所有数据或者总部(总部可以查询下面的所有部门数据级联下去的上一个节点可以查询下一个节点的所有数据),那么广东分部下有50个部门,我要获取这50个部门的所有数据。。。。那么我的关联查询的In就会很影响性能了。请教各位大哥有什么好的查询方式高效而简洁的能告诉一下小弟吗?不胜感激。
...全文
148 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
liveths 2013-03-15
  • 打赏
  • 举报
回复
唉,怎么没有人帮帮我啊?
liveths 2013-03-15
  • 打赏
  • 举报
回复
我那些只是例子数据哇。。。。。。
liveths 2013-03-15
  • 打赏
  • 举报
回复
有这么复杂的查询吗?。。。。有没有更简洁高效的查询啊?
  • 打赏
  • 举报
回复
with Department(GuidCode,DepName,ParentGuid)
as(
select 1,'总部',0 union all
select 2,'分部1',1 union all
select 3,'分部2',1 union all
select 4,'分部3',2 union all
select 5,'分部4',2 union all
select 6,'分部5',3 union all
select 7,'分部6',3
),
Users(GuidCode,UserName,DepartmentGuid)
as(
select 0,'老大',1 union all
select 1,'小一',3 union all
select 2,'小二',3 union all
select 3,'小三',2 union all
select 4,'小四',2 union all
select 5,'小五',6 union all
select 6,'小刘',6
),
Orders(GuidCode,OrderName,UserGuid)
as(
select 0,'订单1',1 union all
select 1,'订单2',1 union all
select 2,'订单3',1 union all
select 3,'订单4',1 union all
select 4,'订单5',2 union all
select 5,'订单6',2 union all
select 6,'订单7',4 union all
select 7,'订单8',1 union all
select 8,'订单9',5 union all
select 9,'订单10',5 union all
select 10,'订单11',1 union all
select 11,'订单12',6 union all
select 12,'订单13',6 union all
select 13,'订单14',1 union all
select 14,'订单15',2 union all
select 15,'订单16',3 union all
select 16,'订单17',3 union all
select 17,'订单18',3
),
tb as(
select * from Department where DepName='分部2' union all
select t.* from Department t join tb c on c.GuidCode=t.ParentGuid
)
select c.* from tb a join Users b on a.GuidCode=b.DepartmentGuid join Orders c on b.GuidCode=c.UserGuid

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧