mysql - 如何比较 2 个数据库(和服务器)中不同的 2 个表? (Oracle 和 MySQL)

标签 mysql sql database oracle

我想比较来自 2 个不同数据库(和服务器)的 2 个表...一个是 Oracle,另一个是 Mysql。

我对同一数据库中的表这样做了:

SELECT FIELD 1, FIELD 2
FROM SCHEMA.TABLENAME1
MINUS
SELECT FIELD 1, FIELD 2
FROM SCHEMA.TABLENAME2

我正在使用 dbeaver 进行查询。

最佳答案

您可以使用不存在来实现等效逻辑:

SELECT FIELD1, FIELD2
FROM SCHEMA.TABLENAME1 t1
WHERE NOT EXISTS (SELECT 1
                  FROM SCHEMA.TABLENAME2 t2
                  WHERE t2.FIELD1 = t1.FIELD1 AND t2.FIELD2 = t2.FIELD2
                 );

其实这个逻辑并不是100%等价的。另一方面,它是标准语法,应该适用于任何数据库。

有两个重要的区别。

首先,它返回重复值。 MINUS 删除重复项。

其次,它将过滤掉任一列中具有 NULL 值的行。如果这是一个问题,可以修改比较以考虑 NULL 值。

另一种方法(更接近MINUS)使用UNION ALL和聚合:

select field1, field2
from ((select field1, field2, 1 as which
       from table1
      ) union all
      (select field1, field2, 2 as which
       from table2
      )
     ) t
group by field1, field2
having max(which) = 1;

这以与MINUS相同的方式处理NULL值和重复值。它还可以轻松概括以获得两个表之间的其他关系。

关于mysql - 如何比较 2 个数据库(和服务器)中不同的 2 个表? (Oracle 和 MySQL),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57475040/

相关文章:

python - 使用 python-mysql、tornado 框架检索列值

mysql - 从连接 View 中删除

sql - ActiveRecord:查找与某个值有关联的记录

database - 在已编译的 Visual Basic .NET 应用程序中如何链接数据源?

android - 需要算法 SQLite Android

php - 使用 Phinx 添加外键

mysql - 在 MySQL 中使用序列号和空格对重复值进行分组

c# - 系统数据SqlClient SqlException

mysql - sql根据类别匹配频率选择相似的电影

MySQL 无法识别外键