这是我的情景
我有一个包含以下字段的权限表。
id | module | permission
1 | client | add
2 | client | edit
3 | client | delete
4 | someth | edit
5 | someth | delete
员工表
id | status | somestatus
1 | act | 1
2 | den | 1
3 | act | 0
4 | den | 1
5 | act | 0
6 | act | 1
现在我需要做的是选择status =“act”和somestatus = 1的员工,并给予他们所有权限,其中module =“client”
所以表employee_permissions应该有这些行
id | empid | permid | permvalue
1 | 1 | 1 | 1
2 | 1 | 2 | 1
3 | 1 | 3 | 1
1 | 6 | 1 | 1
2 | 6 | 2 | 1
3 | 6 | 3 | 1
这是我试过的查询,我被困在这里
INSERT INTO at2_permission_employee (employee_id,permission_id)
SELECT at2_employee.employee_id as employee_id
, (SELECT at2_permission.permission_id as permission_id
FROM at2_permission
where at2_permission.permission_module='client'
)
from at2_employee
where at2_employee.employee_status='Active'
and at2_employee.employees_served_admin = 1;
我得到错误子查询返回多行,这对我来说很有意义。但是我不知道如何修改查询以便迭代子查询返回的行
答案 0 :(得分:1)
如果我没错,就像这样:
INSERT INTO at2_permission_employee (employee_id, permission_id, permvalue)
SELECT
at2_employee.employee_id,
at2_permission.permission_id,
1
FROM at2_permission cross join at2_employee
WHERE
at2_employee.employee_status='Active'
and at2_employee.employees_served_admin = 1
and at2_permission.permission_module='client';
答案 1 :(得分:0)
有点不清楚permvalue
的值应来自何处,因此我对其进行了硬编码,并将permission.id
用于id
和permid
,但此查询应该给你一个如何实现你想要的想法:
insert employee_permissions (id, empid, permid, permvalue)
select p.id, e.id, p.id, 1
from employee e, permissions p
where p.module = 'client' and e.status = 'act' and e.somestatus = 1;