我正在将数据从旧数据库迁移到新数据库。我的目标是将用户的权限从旧数据库移到新数据库。新旧数据库都已具有匹配的用户ID。
问题是旧数据库对于每个用户的权限都有多行(例如,用户3可能有5行具有不同的权限集,这些权限集基于表第二列中的组织ID)。
我怎么能:
仅为每个表填充用户的最高权限(“admin”为最高权限,“read”为最低权限)
旧数据库用户表:

ID     ORG     ADMIN   EDIT    READ
1       43       0       1      0
1       200      1       0      0
1       76       0       0      1
2       43       0       1      0
2       76       0       0      1

新的数据库用户表:
ID     LEVEL
1        0
2        0
3        0
4        0
5        0

新的数据库用户表目标:
ID     LEVEL
1      ADMIN
2      EDIT
3      READ
4      READ
5      EDIT

我对用户“组织”关系不再感兴趣,只想获得他们的最高权限级别。
我正在使用sequel pro,它可能在它的gui中提供一个解决方案,但我不知道。我最近一次尝试使用代码来获取管理员用户(运气不佳)是:
SELECT admin FROM old_db.user oldpermission
JOIN scope FROM homestead_test.users newpermission
ON oldpermission.ID = newpermission.ID;

最佳答案

 SELECT ID, CASE WHEN MAX(ADMIN) = 1 THEN 'ADMIN'
                 WHEN MAX(EDIT)  = 1 THEN 'EDIT'
                 WHEN MAX(READ)  = 1 THEN 'READ'
            END as LEVEL
 FROM OLD_DB
 GROUP BY ID

你也许可以把最后一个简化为
 ELSE 'READ'

因为,如果前2个失败,那么只有READ权限可用

关于sql - SQL查询有条件地联接来自不同数据库的列,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57778028/

10-09 15:53
查看更多