我想比较来自 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/