使用场景:在已登录的操作人员中已经拥有了组权限,要求再给登录的操作人员添加人员权限。
原SQL查询为:SELECT ROLEID FROM OPER_TEAMPRIVILEGE WHERE ID IN(ID_1,ID_2,...ID_n);
修改后SQL查询:Select Distinct * From(select roleid from OPER_TEAMPRIVILEGE t Where Id In ('ID_1,ID_2,...ID_n') Union Select roleid From oper_operatorrole t Where operatorid=' 人员ID');
表格构如下:
组权限表结构 OPER_TEAMPRIVILEGE:
表格名称 | 操作员组权限表(OPER_TEAMPRIVILEGE) | ||||||||
字段名 | 中文名称 | 数据类型 | 长度 | 允许为空 | 缺省值 | 主键 | 外键 | 索引 | 备注 |
ID | 组唯一代号 | Varchar2 | 20 | 否 |
| 是 | 是 |
| OPER_OPERATORTEAM |
ROLEID | 权限编号 | Varchar2 | 10 | 否 |
| 是 | 是 |
| OPER_ROLE |
人员权限结构 OPER_OPERATORROLE:
表格名称 | 操作员人员权限表(OPER_OPERATORROLE) | ||||||||
字段名 | 中文名称 | 数据类型 | 长度 | 允许为空 | 缺省值 | 主键 | 外键 | 索引 | 备注 |
OPERATORID | 人员唯一代号 | Varchar2 | 20 | 否 |
| 是 | 是 |
| OPER_TEAMMEMBER |
ROLEID | 权限编号 | Varchar2 | 10 | 否 |
| 是 | 是 |
| OPER_ROLE |
[备注:]在查询中UNION 最后的返回结果集是去掉了所有的重复记录,而不区分是哪个表里的记录的,而 UNION ALL 会返回合并后的全部结果集,所以修改后的SQL使用Distinct关键字多余的。
今天犯的一个小错误!呵呵~~