nymbian 发表于 2011-6-2 12:29:36

帮忙看下这段SQL怎么写

本帖最后由 nymbian 于 2011-6-2 16:02 编辑

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_iddepartment_name

department_department部门之间隶属关系

idhigh_department_idlow_department_id

目的是找出 部门所以员工 包括直属和下属本部员工

jeongee 发表于 2011-6-2 14:13:23

这个,你把表结构发以下吧

nymbian 发表于 2011-6-2 15:22:07

回复 jeongee 的帖子

表结构已经贴出来了,多谢

nymbian 发表于 2011-6-3 11:06:04

heykite 发表于 2011-6-3 10:16 static/image/common/back.gif
如果你的下属部门还有下属部门怎么办??

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

有点不明白
能否给出详细sql
先谢了

jeongee 发表于 2011-6-3 11:11:25

回复 nymbian 的帖子

感觉麻烦的话,可以这样:
你的用户表加个冗余字段吧,把一级还是二级的id都存进去,一切都简单了

nymbian 发表于 2011-6-3 11:53:20

jeongee 发表于 2011-6-3 11:11 static/image/common/back.gif
回复 nymbian 的帖子

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


这样有多少级就要加多少冗余字段吧

nymbian 发表于 2011-6-3 12:55:33


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 ='行政部' )
)


写成这样还是报错啊

visvoy 发表于 2011-6-3 13:18:06

本帖最后由 visvoy 于 2011-6-3 13:18 编辑

这种子子子查询看的蛋疼,你能不能用2条查询实现?

zhouli520 发表于 2011-6-3 13:28:15

简单点,用多条SQL语句解决吧.

jeongee 发表于 2011-6-3 15:18:05

回复 nymbian 的帖子

不啊,多了就会有其他解决方法的
页: [1] 2
查看完整版本: 帮忙看下这段SQL怎么写