使用静态列表基于 JOIN 插入多行
Insert many rows based on JOIN with static list
我正在尝试编写一个查询来完成任务“授予此列表中的人员与特定人员相同的角色”。
给定输入 table user_roles
user_id | role_id
-----------------
1 | 22
2 | 23
1 | 27
和应该与用户 1 具有相同角色的新用户 ID (3,4,7) 的列表,我想创建一个基于 SELECT
的 INSERT 语句,然后是外部 -加入静态列表以创建包含所有组合的叉积。期望的结果是:
user_id | role_id
-----------------
1 | 22
2 | 23
1 | 27
3 | 22
3 | 27
4 | 22
4 | 27
7 | 22
7 | 27
插入部分应该没有问题,如果我能得到一个SELECT语句来构建数据。我尝试了
的各种排列
SELECT role_id, user_id FROM `user_roles` OUTER JOIN ??? WHERE `user_roles`.`user_id` = 1
在哪里???是一些 MySQL 魔法的结果,创造了 table 像
user_id
-------
3
4
7
我花了一些时间试图想出 SELECT 语法来实现这一点,然后四处搜集建议我试图想出创建一个我可以加入的临时 table然后删除。 (效率不是必需的。)但是,我还没有找到从静态数据创建临时 table 的神奇语法。
如果有其他更有效的魔术循环语法,我也很想了解它。
在我写这个问题的时候,我本可以使用文本编辑器来创建查询,但是那有什么乐趣呢?
你可以试试这个:
SELECT role_id,t.user_id FROM user_roles AS r,(SELECT 3 AS user_id UNION ALL SELECT 4 AS user_id UNION ALL SELECT 7 AS user_id) AS t WHERE r.user_id = 1
我正在尝试编写一个查询来完成任务“授予此列表中的人员与特定人员相同的角色”。
给定输入 table user_roles
user_id | role_id
-----------------
1 | 22
2 | 23
1 | 27
和应该与用户 1 具有相同角色的新用户 ID (3,4,7) 的列表,我想创建一个基于 SELECT
的 INSERT 语句,然后是外部 -加入静态列表以创建包含所有组合的叉积。期望的结果是:
user_id | role_id
-----------------
1 | 22
2 | 23
1 | 27
3 | 22
3 | 27
4 | 22
4 | 27
7 | 22
7 | 27
插入部分应该没有问题,如果我能得到一个SELECT语句来构建数据。我尝试了
的各种排列SELECT role_id, user_id FROM `user_roles` OUTER JOIN ??? WHERE `user_roles`.`user_id` = 1
在哪里???是一些 MySQL 魔法的结果,创造了 table 像
user_id
-------
3
4
7
我花了一些时间试图想出 SELECT 语法来实现这一点,然后四处搜集建议我试图想出创建一个我可以加入的临时 table然后删除。 (效率不是必需的。)但是,我还没有找到从静态数据创建临时 table 的神奇语法。
如果有其他更有效的魔术循环语法,我也很想了解它。
在我写这个问题的时候,我本可以使用文本编辑器来创建查询,但是那有什么乐趣呢?
你可以试试这个:
SELECT role_id,t.user_id FROM user_roles AS r,(SELECT 3 AS user_id UNION ALL SELECT 4 AS user_id UNION ALL SELECT 7 AS user_id) AS t WHERE r.user_id = 1