使用静态列表基于 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