1

これが私のシナリオです

次のフィールドを持つ権限テーブルがあります。

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;

サブクエリが複数の行を返すというエラーが表示されますが、これは理にかなっています。しかし、サブクエリによって返された行を反復処理するためにクエリを変更する方法がわかりません

4

2 に答える 2

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';
于 2015-03-06T16:19:05.703 に答える
0

for の値がどこから来るべきかは少し不明なpermvalueので、それをハードコーディングしてpermission.idfor と の両方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;
于 2015-03-06T16:20:04.373 に答える