MySQL - 表中的重复行具有由 JOIN 确定的不同列值

标签 mysql join sql-insert

我在编写 INSERT 语句来重复行时遇到了一些困难,但在另一个表中定义了不同的 KEY 值。 KEY 不一定具有相同的值,因此这就是 JOIN 的用武之地。

Roles
RoleID     Name
-------------------------
3          ROLE_ADMIN
12         ROLE_OPERATOR_ADMIN
13         ROLE_CARD_ADMIN

OperatorRoles
RoleID     OperatorUserID
-------------------------
3          5
3          7

我需要做的是为所有 OperatorRoles.OperatorUserID 用户分配 ROLE_OPERATOR_ADMIN 和 ROLE_CARD_ADMIN 角色,然后删除具有 ROLE_ADMIN 角色的任何 OperatorRoles.OperatorUserID 行(本质上将 ROLE_ADMIN 角色分为这两个角色)。

OperatorRoles
RoleID     OperatorUserID
-------------------------
12         5
12         7
13         5
13         7

这是我到目前为止所想到的,但它试图插入比应有的更多的记录:

INSERT IGNORE INTO OperatorRoles (RoleID, OperatorUserID)
SELECT r.RoleID, opRoles.OperatorUserID
FROM Roles r JOIN OperatorRoles opRoles ON r.RoleID = r.RoleID
WHERE r.Name = 'ROLE_OPERATOR_ADMIN';

这应该很简单,但我无法让它工作。提前致谢!

最佳答案

在根据 @Gordon-Linoff 发布的内容再次思考之后,我想出了这个,它做了我想要的:

INSERT IGNORE INTO OperatorRoles(RoleID, OperatorUserID)
SELECT nr.newRoleID, opRoles.OperatorUserID
FROM
    (SELECT r1.RoleID AS newRoleID
    FROM Roles r1
    WHERE r1.Name IN ('ROLE_OPERATOR_ADMIN' , 'ROLE_CARD_ADMIN')) nr
CROSS JOIN OperatorRoles oproles
JOIN Roles r2 ON opRoles.RoleID = r2.RoleID
WHERE r2.Name = 'ROLE_ADMIN';

关于MySQL - 表中的重复行具有由 JOIN 确定的不同列值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28071318/

相关文章:

mysql - 用大型 SQL 数据库填充 CoreData

mysql - 下面的 mysql 查询的改进

sql - SQL-内部联接2个表,但如果1个表为空则返回全部

javascript - 使用 ODBC 和 Node.js 插入数据

sql - 在 RETURNING 语句中使用记录作为函数参数

php - 从parent_id id表结构构建树

php - 将 SQL 数据库中的字符串与 "normal"字符串进行比较

MYSQL 左连接不起作用

mysql - 仅当列值等于 "joined_table1.id"或 "joined_table2.id"时如何获取行?

python - 磁盘读取会减慢 MySQL 中的 INSERT 速度