用户
 找回密码
 入住 CI 中国社区
搜索
查看: 4784|回复: 11
收起左侧

[HELP] 帮忙看下这段SQL怎么写

[复制链接]
发表于 2011-6-2 12:29:36 | 显示全部楼层 |阅读模式
本帖最后由 nymbian 于 2011-6-2 16:02 编辑
SQL复制代码
SELECT *
            FROM staffs
            LEFT JOIN department
            ON department.department_id = staffs.department_id
            WHERE department.department_name = '行政部' //找出行政部直属员工
 
OR WHERE IN
(SELECT low_department_id
            FROM department_department
            LEFT JOIN department
            ON department.department_id = department_department.high_department_id
            WHERE department.department_name = '行政部') //找出行政部下属部门员工
 
复制代码

共有三张表
staffs 员工
staff_id序号
job_number工号
name姓名
english_name英文名
sex性别
position职位
department_id

department 部门
department_id
department_name

department_department部门之间隶属关系
id
high_department_id
low_department_id

目的是找出 部门所以员工 包括直属和下属本部员工
发表于 2011-6-2 14:13:23 | 显示全部楼层
这个,你把表结构发以下吧
 楼主| 发表于 2011-6-2 15:22:07 | 显示全部楼层
回复 jeongee 的帖子

表结构已经贴出来了,多谢
 楼主| 发表于 2011-6-3 11:06:04 | 显示全部楼层
heykite 发表于 2011-6-3 10:16
如果你的下属部门还有下属部门怎么办??

用两条sql吧,先查询关系部门,然后在查询出所有的员工. ...

有点不明白
能否给出详细sql
先谢了
发表于 2011-6-3 11:11:25 | 显示全部楼层
回复 nymbian 的帖子

感觉麻烦的话,可以这样:
你的用户表加个冗余字段吧,把一级还是二级的id都存进去,一切都简单了
 楼主| 发表于 2011-6-3 11:53:20 | 显示全部楼层
jeongee 发表于 2011-6-3 11:11
回复 nymbian 的帖子

感觉麻烦的话,可以这样:

这样有多少级就要加多少冗余字段吧
 楼主| 发表于 2011-6-3 12:55:33 | 显示全部楼层
SQL复制代码
 
SELECT *
FROM staffs
WHERE staffs.department_id IN (
(SELECT low_department_id
            FROM department_department
            WHERE department_department.high_department_id =(
SELECT department.department_id
FROM department
WHERE department.department_name =  '行政部' ))
,
(
SELECT department.department_id
FROM department
WHERE department.department_name =  '行政部' )
)
 
 
复制代码

写成这样还是报错啊
发表于 2011-6-3 13:18:06 | 显示全部楼层
本帖最后由 visvoy 于 2011-6-3 13:18 编辑

这种子子子查询看的蛋疼,你能不能用2条查询实现?
发表于 2011-6-3 13:28:15 | 显示全部楼层
简单点,用多条SQL语句解决吧.
发表于 2011-6-3 15:18:05 | 显示全部楼层
回复 nymbian 的帖子

不啊,多了就会有其他解决方法的

本版积分规则