Mysql 同时插入状态和选定值

Mysql 同时插入状态和选定值,mysql,sql,sqlite,Mysql,Sql,Sqlite,表格用户 |_id, | login | --------------- | 1 | test | |user_id|role_id| ----------------- | 1 | 1 | | 1 | 2 | | 1 | 3 | |user_id|role_id| ----------------- | 1 | 1 | 表格角色 |_id, | role_name| ------------------ | 1 |

表格用户

|_id, | login |
---------------
|  1  |  test |
|user_id|role_id|
-----------------
|   1   |   1   |
|   1   |   2   |
|   1   |   3   |
|user_id|role_id|
-----------------
|   1   |   1   |
表格角色

|_id, | role_name|
------------------
|  1  |  Admin   |
|  2  | Moderator|
|  3  |  User    |
|user_id|role_id|
-----------------
|   1   |   1   |
|   1   |   2   |
|   1   |   3   |
|user_id|role_id|
-----------------
|   1   |   1   |
表格用户登录

|user_id|role_id|
-----------------
|   1   |   1   |
|   1   |   2   |
|   1   |   3   |
|user_id|role_id|
-----------------
|   1   |   1   |
|用户id |角色id |

|user_id|role_id|
-----------------
|   1   |   1   |
|   1   |   2   |
|   1   |   3   |
|user_id|role_id|
-----------------
|   1   |   1   |
我想为ID为1的用户设置角色,这些角色在查询中按其名称进行搜索,这里是我目前得到的结果:

"INSERT INTO user_role
        + "(userId, roleId) VALUES (1, (SELECT r._id FROM roles r WHERE r.role_name IN ('Admin', 'Moderator', 'User')))"
|user_id|role_id|
-----------------
|   1   |   1   |
|   1   |   2   |
|   1   |   3   |
|user_id|role_id|
-----------------
|   1   |   1   |
问题是,角色只设置了一个Id,而不是3个

|user_id|role_id|
-----------------
|   1   |   1   |
|   1   |   2   |
|   1   |   3   |
|user_id|role_id|
-----------------
|   1   |   1   |
预期结果:

|user_id|role_id|
-----------------
|   1   |   1   |
|   1   |   2   |
|   1   |   3   |
|user_id|role_id|
-----------------
|   1   |   1   |
我得到的是:

|user_id|role_id|
-----------------
|   1   |   1   |
|   1   |   2   |
|   1   |   3   |
|user_id|role_id|
-----------------
|   1   |   1   |

是否使用
插入。选择
修复您的问题

|user_id|role_id|
-----------------
|   1   |   1   |
|   1   |   2   |
|   1   |   3   |
|user_id|role_id|
-----------------
|   1   |   1   |
INSERT INTO user_role(userId, roleId) 
    SELECT 1, r._id
    FROM roles r
    WHERE r.role_name IN ('Admin', 'Moderator', 'User');
role\u name
s可能与
in
列表中的
不匹配。也许您应该运行子查询,看看您得到了什么。

使用INSERT INTO SELECT非常聪明,它非常高效,并且减少了开销!
|user_id|role_id|
-----------------
|   1   |   1   |
|   1   |   2   |
|   1   |   3   |
|user_id|role_id|
-----------------
|   1   |   1   |