数据库有两个表,公司: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. 才疏学浅,真的没办法解决这个问题,请各位大佬帮小弟看看,如果是我的方法出了错误能否提点一下,或者在这个问题上还有更好的解决方法可以指导一下。小弟在此谢过了,这是我所有的积分,只求能为鄙人解疑答惑
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. 才疏学浅,真的没办法解决这个问题,请各位大佬帮小弟看看,如果是我的方法出了错误能否提点一下,或者在这个问题上还有更好的解决方法可以指导一下。小弟在此谢过了,这是我所有的积分,只求能为鄙人解疑答惑
解决方案 »
- 急求一份设备管理系统的数据库源代码(急!!!!!!!!!!!)
- 请问Mysql中identifier指的是什么?
- 用mysql如何不在默认盘符下创建数据库?
- mysql语句优化问题
- 50分求一条SQL语句
- mysql只有命令行模式?新手求教!
- mysql和MS sql 2000能在2003下共存吗?
- 关于内存减少的问题
- MYSQL的入门问题,LOAD DATA LOCAL INFILE "pet.txt" INTO TABLE pet;的问题?
- profile怎么修改容量?
- 求教一个海量数据的存储设计方案
- 我有100万条企业名称,如果用 like %企业名称% 来查询不走索引特别慢,集群的效果也不明显,大佬们有什么好办法吗?
2.再通过DepartmentCode执行不同的SQL
道理是这么个道理,不过得怎么执行呢?判断的方法也试了,都没有可行的非要用SQL,那就用存储过程
SELECT DepartmentCode INTO @DepartmentCode FROM User WHERE id=@UserId LIMIT 1;
IF @DepartmentCode = '00104' THEN
...
ELSE
...
END IF;
道理是这么个道理,不过得怎么执行呢?判断的方法也试了,都没有可行的非要用SQL,那就用存储过程
SELECT DepartmentCode INTO @DepartmentCode FROM User WHERE id=@UserId LIMIT 1;
IF @DepartmentCode = '00104' THEN
...
ELSE
...
END IF;
QAQ存储过程我也想过了呢 ,但是我这边只能填写from后面的语句,条件十分有限
where case when User.DepartmentCode='00104' then User.id=@UserId else 1=1 end
看你的条件区分只有 and User.id=2 , 但是还是要先查询者的部门,所以不知道条件要怎么做区分,我这边大致上的写法像上面,符合的时候追加条件 ,不符合的时候给1=1