【SQL】数据库多表的不同列组合输出

1. 数据库表

组织机构表 dept

id 部门id

dept_name 部门名称

dept_rank 部门层级

updept_id 上级部门id

def_flag 是否删除的标识

插入数据:

(1,苹果汽车公司,1,1,0)

(2,轮轴车间,2,1,0)

(3,班组一,3,2,0)              [轮轴车间有个班组一]

(4,底盘车间,2,1,0) 

(5,班组一,3,4,0)              [底盘车间也有个班组一]

员工表 staff

id 员工id

staff_name 员工姓名

company_id 公司id

workshop_id 车间id

workteam_id 班组id

del_flag 是否删除的标识

插入数据:

(1,张三,1,2,3,0)

(2,李四,1,4,5,0)

可知,张三 是 苹果汽车公司轮轴车间班组一 的员工,李四是 苹果汽车公司底盘车间班组一的员工。

1.1 优点:

这种单表的层级结构设计,实现比较简单,健壮性高,即时以后层级增加,此表也能不做更改,继续使用。

1.2 缺点:

表内数据关联性过于强,一旦中间级别的组织被标记删除,其子组织都必须同步更新:被标记为删除。

2. 问题

输出员工id是2的员工的详细信息,格式如:

苹果汽车公司底盘车间班组一李四。

只用一条SQL。

通俗来说,就是把员工表里面的 公司id,车间id,班组id  转成各自的名称,即把 1,2,3转成 XXX公司,XXX车间,XXX班组。

3. SQL答案

select 
(select dept_name from dept where dept_id = 
   (select company_id from staff sf where sf.id = 2)
) as company_name,
(select dept_name from dept where dept_id = 
   (select workshop_id from staff sf where sf.id = 2)
) as workshop_name,
(select dept_name from dept where dept_id = 
  (select workteam_id from staff sf where sf.id = 2)
) as workteam_name

4. 知识点

学习和使用了那么久的SQL语法,却感觉还是第一次这么用。自己的思路还是狭隘了,没有到打开。

这个SQL看着不完整,既没有 from table 子句,也没有 where 子句。但是确实可以使用。

实践证明:select 后面可以直接跟各种结果,而且 SQL不一定 需要 from table 和 where 子句等。

5. 拓展

拓展一下,这个方法还可以 单条SQL语句返回三个无关联的表的不同列的数据,几乎可以重新整合任何表的任何列数据到一个结果集中。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

qilei2010

送我一张彩票中了平分

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值