SQL 查询有条件地连接来自不同数据库的列

标签 sql database sequelpro

我正在将数据从旧数据库迁移到新数据库。我的目标是将用户的权限从旧数据库移动到新数据库。新旧数据库都已经有匹配的用户 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/

相关文章:

SQL 查询查找每月周年纪念日的用户

mysql - 是否建议在数据库的所有表中使用文本字段作为用户 ID?

mysql - 无法连接到 MySQL

mysql - 如何从 aws 实例读取 key 并添加到我的 mysql 查询中?

sql - 如何在给定日期范围内查找列的总和,其中表格只有开始日期和结束日期

mysql - 存储过程结果到 MySQL 过程中的临时表

database - 如何查找SQLITE数据库文件版本

mysql - 如何将数据从 csv 导入到 SequelPro?

java - SQL Java 使用 phpmyadmin 中参数索引超出范围