嗨,我在尝试弄清楚如何构建以下查询时遇到了麻烦:
INSERT INTO role_permissions (role_id, permission)
VALUES (
(SELECT role_id
FROM role_permissions
WHERE permission = 'manage_admins'),
'create_admins');
INSERT INTO role_permissions (role_id, permission)
VALUES (
(SELECT role_id
FROM role_permissions
WHERE permission = 'manage_admins'),
'edit_admins');
Run Code Online (Sandbox Code Playgroud)
因此,基本上在某些情况下,有一个称为的权限manage_admins
,该权限将允许用户编辑/创建,但是现在我需要将此权限分为2个不同的权限。关键是我还有一个role_permissions
表,用于存储角色的所有权限。
因此,我需要为每个具有旧权限的角色插入2个新权限,我提供的示例失败了,因为SELECT
查询返回了多个值。所以这就是我遇到的麻烦,因此我们将不胜感激。
摆脱values
:
INSERT INTO role_permissions (role_id, permission)
SELECT rp.role_id, t.permission
FROM role_permissions rp
cross join (values ('edit_admins'), ('create_admins')) as t(permission)
WHERE rp.permission = 'manage_admins';
Run Code Online (Sandbox Code Playgroud)
交叉联接将创建具有相同role_id的两行,然后select将这些ID与新的权限名称一起插入表中。