结构如下:
人员(id,userId)
用户(userId,depId)
部门(depId)
辖区(popId)
部门辖区(depid,popId)我需要根据 某个用户 获取用户所在部门所管理的辖区的所有人员信息...
实在想不出 怎么去 写这个 sql 求 前辈指点....

解决方案 »

  1.   

     (不要高估你的汉语表达能力或者我的汉语理解能力)
       建议你列出你的表结构,并提供测试数据以及基于这些测试数据的所对应正确结果。
       参考一下这个贴子的提问方式http://topic.csdn.net/u/20091130/20/8343ee6a-417c-4c2d-9415-fa46604a00cf.html
       
       1. 你的 create table xxx .. 语句
       2. 你的 insert into xxx ... 语句
       3. 结果是什么样,(并给以简单的算法描述)
       4. 你用的数据库名称和版本(经常有人在MS SQL server版问 MySQL)
       
       这样想帮你的人可以直接搭建和你相同的环境,并在给出方案前进行测试,避免文字描述理解上的误差。   
      

  2.   

    select *
    from 人员 a inner join 用户 b on a.userId=b.userId
               inner join .....
    到底幾個表啊?
      

  3.   

    select * from (select depId from 部门 where depId in(select depId from 用户 where userId='***')
      

  4.   

    select * from (select depId from 部门 where depId in(select depId from 用户 where userId='***'))看看这个对你有没有用.
      

  5.   


    没有数据?感觉类似树
    IF OBJECT_ID('tb') IS NOT NULL DROP TABLE tb 
    GO
    CREATE TABLE tb(id VARCHAR(3),pid VARCHAR(3),[name] VARCHAR(10))
    GO
    INSERT INTO tb SELECT '001',NULL,'河南省' 
    UNION ALL SELECT '002','001','洛阳市'
    UNION ALL SELECT '003','001','新乡市' 
    UNION ALL SELECT '004','002','栾川县' 
    UNION ALL SELECT '005','003','长垣县' 
    UNION ALL SELECT '006','002','孟津县' 
    UNION ALL SELECT '007','004','冷水乡' 
    UNION ALL SELECT '008','004','叫河乡' 
    UNION ALL SELECT '009','008','A村' 
    UNION ALL SELECT '010','008','B村'
    GO
    /*
    1、查询指定节点及其所有子节点
    --如:已知 栾川县
    --得到结果id   pid  name
    ---- ---- ----------
    004  002  栾川县
    007  004  冷水乡
    008  004  叫河乡
    009  008  A村
    010  008  B村
    */****************************查询开始******************************
    --SQL2005 使用CTE
    DECLARE @ VARCHAR(10)
    SET @='栾川县'
    ;WITH XiaoAi AS
    (
    SELECT id FROM tb WHERE [name]=@
    UNION ALL
    SELECT t.id FROM XiaoAi AS a INNER JOIN tb AS t ON a.id=t.pid
    )
    SELECT t.* FROM XiaoAi 
    --SQL 2000 使用函数
    IF OBJECT_ID('dbo.XiaoAi') IS NOT NULL DROP FUNCTION dbo.XiaoAi
    GO
    CREATE FUNCTION dbo.XiaoAi(@ VARCHAR(20)) 
    RETURNS @t TABLE(id VARCHAR(3), pid VARCHAR(3), [name] VARCHAR(20),Level INT)
    AS 
    BEGIN 
        DECLARE @level INT
        SET @level=1
        INSERT INTO @t SELECT *,@level FROM tb WHERE [name]=@
        WHILE(@@ROWCOUNT>0)
            BEGIN 
                SET @level=@level+1
                INSERT INTO @t SELECT t.*,@level FROM tb AS t,@t AS a WHERE a.id=t.pid AND a.level=@level-1
            END
    RETURN 
    END
    GO
    --调用函数
    SELECT id, pid,[name]  from dbo.XiaoAi('栾川县')
    --****************************查询结束*************************************
      

  6.   

    结构如下: 
    人员表(id,userId)--人员ID,用户ID 
    用户表(userId,depId) --用户ID,用户所属部门ID
    部门表(depId)--部门ID
    辖区表(popId)--辖区ID
    部门辖区中间表(depid,popId)--部门ID,辖区ID
      

  7.   


    create table employee(
        empId    varchar(20),
        userId   varchar(20)
    )
    create table user(
        userId   varchar(20),
        depId   varchar(20)
    )
    create table dep(
        depId    varchar(20),
        depName  var(20)
    )
    create table pop(
        popId    varchar(20),
        popName  varchar(20)
    )create table T_dep_pop(
        depId   varchar(20),
        popId   varchar(20)
    )
    insert into dep values('1','办公室');insert into pop values('1','青秀区');
    insert into pop values('2','罗湖区');
    insert into pop values('3','秀峰区');insert into T_dep_pop values('1','1);
    insert into T_dep_pop values('1','2');insert into user values('1','1');insert into employee values('1','1');我想查询 用户ID = 1, 所在 的部门id = 1,下面所包含的辖区 = 1,2, 所 包含的 人员信息 emp
      

  8.   

    select * from 人员表 a,用户表 b,(
    select * from 部门辖区中间表 
    where 辖区ID=(select 辖区ID from 部门辖区中间表 
    where 部门ID=(select 用户所属部门ID from 用户表 
    where 用户ID=@用户ID)) c
    where a.用户ID=b.用户ID and b.部门ID=c.部门ID
      

  9.   


    没有和pop 产生关联呀
      

  10.   


    这个好像快查出来了但是..... 辖区ID= 这个地方如果用 "=" 就会 查不出 并且报错
    用 in 的话 出来的记录会很多 并且重复
    因为 辖区和部门 多对多的关系...
      

  11.   

    select *  from  employee e left join 
    [user]  u on e.userId=u.userId
    where depId in
    (
    select distinct depId from T_dep_pop 
    where popId in 
    (
    select popId from T_dep_pop where depId= (select depId from[user] where userId=1))
    )
      

  12.   


    IF object_id('A') IS NOT NULL DROP TABLE A
    IF object_id('U') IS NOT NULL DROP TABLE U
    IF object_id('D') IS NOT NULL DROP TABLE D
    IF object_id('P') IS NOT NULL DROP TABLE P
    IF object_id('DP') IS NOT NULL DROP TABLE DP
    go
    CREATE TABLE A --人员表
    (
    ID VARCHAR(10) ,
    USERID VARCHAR(10)
    )
    CREATE TABLE U --用户表
    (
    USERID VARCHAR(10),
    DEPID VARCHAR(10)
    )
    CREATE TABLE D --部门表
    (
    DEPID VARCHAR(10),
    DEPNAME VARCHAR(20)
    )
    CREATE TABLE P --辖区表
    (
    POPID VARCHAR(10),
    POPNAME VARCHAR(20)
    )
    CREATE TABLE DP --部门辖区中间表
    (
    DEPID VARCHAR(10),
    POPID VARCHAR(10)
    )
    go
    insert D
    select  'D1','部门1' union all
    select  'D2','部门2' union all
    select  'D3','部门3' union all
    select  'D4','部门4'  
    go
    insert P
    select  'P1','辖区1' union all
    select  'P2','辖区2' union all
    select  'P3','辖区3' union all
    select  'P4','辖区4'  
    go
    insert DP
    select  'D1','P1' union all
    select  'D1','P2' union all
    select  'D1','P3' union all
    select  'D1','P4' union all
    select  'D2','P1' union all
    select  'D2','P2' union all
    select  'D2','P4' 
    go
    insert U
    select  'U1','D1' union all
    select  'U2','D1' union all
    select  'U3','D1' union all
    select  'U4','D2' union all
    select  'U5','D2' union all
    select  'U6','D2' union all
    select  'U7','D3' union all
    select  'U8','D3' union all
    select  'U9','D3' union all
    select  'U10','D4' union all
    select  'U11','D4' union all
    select  'U12','D4'   
    go
    insert A
    select  'A1','U1' union all
    select  'A2','U2' union all
    select  'A3','U3' union all
    select  'A4','U4' union all
    select  'A5','U5' union all
    select  'A6','U6' union all
    select  'A7','U7' union all
    select  'A8','U8' union all
    select  'A9','U9' union all
    select  'A10','U10' union all
    select  'A11','U11' union all
    select  'A12','U12'   
    go--我需要根据 某个用户 获取用户所在部门所管理的辖区的所有人员信息... 
    --查询
    select A.ID,U.USERID,U.DEPID FROM 
    A
    INNER JOIN U ON A.USERID=U.USERID
    INNER JOIN 
    (
    select DEPID from DP where POPID in 
    (select POPID from DP  where  DEPID= 
    (
    select DEPID from U where USERID=
    (select USERID from A where ID='A1') 
    )
    ) group by DEPID
    ) T on t.DEPID=u.DEPID--结果
    ID  UserID  DepID
    A1 U1     D1
    A2 U2     D1
    A3 U3     D1
    A4 U4     D2
    A5 U5     D2
    A6 U6     D2(6 行受影响)
      

  13.   


    soRRY 应该是IN,手抖了一下。