bulkinsert with-were子句

ht4b089n  于 2021-07-24  发布在  Java
关注(0)|答案(1)|浏览(170)

我有三个数据库表-角色、权限和角色权限,如下所示。

  1. Permissions
  2. |---------------------|------------------|
  3. | name | id |
  4. |---------------------|------------------|
  5. | THREAD_VIEW | 1 |
  6. |---------------------|------------------|
  7. | TEAM_VIEW | 2 |
  8. |---------------------|------------------|
  9. | TEAM_EDIT | 3 |
  10. |---------------------|------------------|
  11. Roles
  12. |---------------------|------------------|
  13. | name | id |
  14. |---------------------|------------------|
  15. | ADMIN | 11 |
  16. |---------------------|------------------|
  17. | MEMBER | 12 |
  18. |---------------------|------------------|
  19. | EMPLOYEE | 13 |
  20. |---------------------|------------------|
  21. | FRONT DESK | 14 |
  22. |---------------------|------------------|
  23. | GATE KEEPER | 15 |
  24. |---------------------|------------------|
  25. rolePermissions
  26. |---------------------|------------------|
  27. | roleId | permissionId |
  28. |---------------------|------------------|
  29. | 11 | 1 |
  30. |---------------------|------------------|
  31. | 11 | 2 |
  32. |---------------------|------------------|
  33. | 12 | 1 |
  34. |---------------------|------------------|
  35. | 12 | 3 |
  36. |---------------------|------------------|
  37. | 13 | 3 |
  38. |---------------------|------------------|
  39. | 14 | 1 |
  40. |---------------------|------------------|
  41. | 15 | 2 |
  42. |---------------------|------------------|

我想写一个查询来添加权限 TEAM_VIEW (id-2)对于 THREAD_VIEW (id-1)权限已处于活动状态。我们可以从中看到 rolePermissionsroleId 11已经有了 permissionId 我得补充一句 permissionId 2个 roleId 12和 roleId 14我是mysql的初学者。我写了一些东西,但不管用。

  1. insert into rolePermissions(roleId, permissionId)
  2. select rp.roleId, p.id from rolePermissions rp
  3. join Permissions p on p.id = rp.permissionId
  4. where p.name = 'THREAD_VIEW' and p.name <> 'TEAM_VIEW';
1cosmwyk

1cosmwyk1#

我想你想要:

  1. insert into rolePermissions(roleId, permissionId)
  2. select r.roleId, p.permissionId
  3. from roles r
  4. inner join permissions p on p.name = 'TEAM_VIEW'
  5. where exists (
  6. select 1
  7. from rolePermissions rp1
  8. inner join permissions p1 on p1.id = r.permissionId
  9. where p1.name = 'THREAD_VIEW' and rp1.roleId = r.id
  10. )

这将为已经具有 'THREAD_VIEW' 许可。
如果您想确保新元组在目标表中还不存在,那么,假设您在 roleId, permissionId ,只需添加 on duplicate key 查询末尾的子句:

  1. on duplicate key update roleId = values(roleId)

相关问题