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 |