我正在将数据从旧数据库迁移到新数据库。我的目标是将用户的权限从旧数据库移动到新数据库。新旧数据库都已经有匹配的用户 ID。
问题是旧数据库对每个用户的权限有多个行(例如,根据表第二列中的组织 ID,用户 #3 可能有 5 行具有不同的权限集。
我怎样才能:
只用用户的最高权限填充新表('Admin'是最高权限,'Read'权限是最低权限)
OLD_DB 用户表:
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
NEW_DB 用户表目标:
ID LEVEL
1 ADMIN
2 EDIT
3 READ
4 READ
5 EDIT
我对用户“ORG”关系不再感兴趣,只想要他们的最高权限级别。
我正在使用 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'
因为,如果 first 2 失败则只有 READ
权限可用
关于SQL 查询有条件地连接来自不同数据库的列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57778028/