数据库有两个表,公司:Company,用户:User
Company客户表
id  UserID  name
1    5          厦门XX贸易有限公司
2    6          汕头XX纺织有限公司
3    5          常州XX纺织印染有限公司
4    2          杭州XX布艺有限公司
5    3          佛山XX布业
6    5          佛山市XX纺织有限公司
7    2          佛山XXX棉业公司
User用户表
id     name      sysName   DepartmentCode
1 陈XX maggie 00106
2 蔡XX caicai 00104
3 柯XX viline 00102
4 刘XX doris 00103
5 俞XX cindy 00106
6 黄XX Amily 00104涉及到一个权限的问题,部门编号(DepartmentCode)为'00104'时,这个部门是销售部门。
销售部门的员工在查看客户时,只能看到自己的客户。
比如User表的   '2  蔡XX  caicai   00104',
查询时的sql='select * from Company  left join User  on Company.UserID=User.id where 1=1  and User.DepartmentCode='00104' and User.id=2 '
而除了销售部门的员工,都可以查看所有客户,则不需要指定id
查询时的sql='select * from Company  left join User  on Company.UserID=User.id where 1=1   '  and User.DepartmentCode!='00104'页面传进来的参数:@UserId
我的问题就是通过这个传进来的参数,如何把以上的条件在一句sql中执行。通过判断传进来的参数@UserId是否是属于销售部门的员工执行查询结果。我试了几种方法:
1.(case when User.DepartmentCode='00104' then User.id=@UserId  else User.id<>NULL end )
出现错误,then后不能User.id=@UserId
2.( User.DepartmentCode='00104' and User.id=@UserId) or (User.DepartmentCode!='00104'  and User.id!=null)
查询结果始终跳不到  or 后的(User.id!=null)
3. (User.id in (SELECT id FROM User WHERE DepartmentCode='00104' AND id=@UserId  )) OR (User.id is not null)
这一段始终优先判断(User.id is not null),输入销售部门的员工id也查询出所有结果
4. 才疏学浅,真的没办法解决这个问题,请各位大佬帮小弟看看,如果是我的方法出了错误能否提点一下,或者在这个问题上还有更好的解决方法可以指导一下。小弟在此谢过了,这是我所有的积分,只求能为鄙人解疑答惑

解决方案 »

  1.   

    把这个逻辑 放到程序中处理更方便,为啥要放到算sql中处理逻辑。
      

  2.   

    1.通过UserId获取用户的DepartmentCode
    2.再通过DepartmentCode执行不同的SQL
      

  3.   


    道理是这么个道理,不过得怎么执行呢?判断的方法也试了,都没有可行的非要用SQL,那就用存储过程
    SELECT DepartmentCode INTO @DepartmentCode FROM User WHERE id=@UserId LIMIT 1;
    IF @DepartmentCode = '00104' THEN
    ...
    ELSE
    ...
    END IF;
      

  4.   


    道理是这么个道理,不过得怎么执行呢?判断的方法也试了,都没有可行的非要用SQL,那就用存储过程
    SELECT DepartmentCode INTO @DepartmentCode FROM User WHERE id=@UserId LIMIT 1;
    IF @DepartmentCode = '00104' THEN
    ...
    ELSE
    ...
    END IF;
    QAQ存储过程我也想过了呢 ,但是我这边只能填写from后面的语句,条件十分有限
      

  5.   

    select * from Company left join User  on Company.UserID=User.id 
    where case when User.DepartmentCode='00104' then User.id=@UserId else 1=1 end
      

  6.   

    老哥,then 后,不是只能是返回的内容,不能是判断或者赋值吗?then后不能这样用=号吧
      

  7.   

    SELECT * FROM Company,User where Company.UserID = User.id and User.id = 1 and  if(User.DepartmentCode='00104',1=0,1=1);
    看你的条件区分只有 and User.id=2 , 但是还是要先查询者的部门,所以不知道条件要怎么做区分,我这边大致上的写法像上面,符合的时候追加条件 ,不符合的时候给1=1