我有三个数据库表--Roles,Permissions和rolePermissions,如下所示。
Permissions
|---------------------|------------------|
| name | id |
|---------------------|------------------|
| THREAD_VIEW | 1 |
|---------------------|------------------|
| TEAM_VIEW | 2 |
|---------------------|------------------|
| TEAM_EDIT | 3 |
|---------------------|------------------|
Roles
|---------------------|------------------|
| name | id |
|---------------------|------------------|
| ADMIN | 11 |
|---------------------|------------------|
| MEMBER | 12 |
|---------------------|------------------|
| EMPLOYEE | 13 |
|---------------------|------------------|
| FRONT DESK | 14 |
|---------------------|------------------|
| GATE KEEPER | 15 |
|---------------------|------------------|
rolePermissions
|---------------------|------------------|
| roleId | permissionId |
|---------------------|------------------|
| 11 | 1 |
|---------------------|------------------|
| 11 | 2 |
|---------------------|------------------|
| 12 | 1 |
|---------------------|------------------|
| 12 | 3 |
|---------------------|------------------|
| 13 | 3 |
|---------------------|------------------|
| 14 | 1 |
|---------------------|------------------|
| 15 | 2 |
|---------------------|------------------|
我想编写一个查询,为thread_view
(id-1)权限已经处于活动状态的角色添加权限team_view
(id-2)。 正如我们在rolepermission
表中看到的,roleid
11已经具有permissionid
2,我必须为roleid
12和roleid
14添加permissionid
2。 我是MySQL的初学者。 我写了一些东西,但那不起作用。
insert into rolePermissions(roleId, permissionId)
select rp.roleId, p.id from rolePermissions rp
join Permissions p on p.id = rp.permissionId
where p.name = 'THREAD_VIEW' and p.name <> 'TEAM_VIEW';
我想你想:
insert into rolePermissions(roleId, permissionId)
select r.roleId, p.permissionId
from roles r
inner join permissions p on p.name = 'TEAM_VIEW'
where exists (
select 1
from rolePermissions rp1
inner join permissions p1 on p1.id = r.permissionId
where p1.name = 'THREAD_VIEW' and rp1.roleId = r.id
)
这将为已经具有'thread_view'
权限的角色插入新元组。
如果您希望确保目标表中还不存在新的元组,那么,假设您在roleid,permissionid
上有唯一的键,您只需在查询末尾添加一个on duplicate key
子句即可:
on duplicate key update roleId = values(roleId)