您好我无法弄清楚如何构建以下查询:
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');
所以基本上是一些上下文,有一个名为manage_admins
的权限允许用户编辑/创建,但现在我需要将此权限分成两个不同的权限。问题是我还有一个role_permissions
表,我存储了角色的所有权限。
因此,我需要为具有旧权限的每个角色插入2个新权限,我提供的示例失败,因为SELECT
查询返回多个值。所以这就是我遇到的麻烦,所以任何帮助都会非常感激。
答案 0 :(得分:2)
摆脱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';
交叉连接将创建两个具有相同role_id的行,然后select将这些ID与新权限名称一起插入表中。
答案 1 :(得分:1)
要插入多行,只需省略VALUES
:
INSERT INTO role_permissions (...)
SELECT ...