MSQL从带有子查询和1个值的select语句中插入多行

时间:2021-06-22 11:24:44

标签: mysql sql

我想在我的表中插入新数据,条件是我从子查询这里得到的表示例:

权限

role_id     permission_id
   1              1
   1              2
   1              3
   2              1
   2              3
   3              1
   3              2
   4              1

所以,假设 role_id 是一组 id,它具有多个连接的权限 id。 所以我想插入新数据,role_id 没有权限 id 2。它们是 role_id 2 和 4

我想运行这个查询:

INSERT INTO PERMISSION
VALUES ('2', '2')
VALUES ('4', '2');

在 1 个查询中,我尝试运行此查询:

INSERT INTO permission(role_id, permission_id)
VALUES( 
    (select distinct(role_id) from role_permission rp2 
    where role_id NOT IN (
    select role_id from role_permission rp
    where permission_id = 2)),
    2);

但结果总是出错:

SQL Error [1242] [21000]: Subquery returns more than 1 row

有什么方法可以使用 mysql 插入具有 1 个值的多个查询组合吗?

1 个答案:

答案 0 :(得分:0)

您的第一个查询缺少逗号并重复 VALUES。我还建议列出列

INSERT INTO PERMISSION (role_id, permission_id)
    VALUES ('2', '2'),
           ('4', '2');

请注意,id 通常是数字。如果是这种情况,请删除单引号。

对于第二个查询,使用 INSERT . . . SELECT"

INSERT INTO permission (role_id, permission_id)
    select rp.role_id, 2
    from role_permission rp
    group by rp.role_id
    having sum(rp.permission_id = 2) = 0;
相关问题