gpt4 book ai didi

sql - Oracle 中的表 "Diff"

转载 作者:行者123 更新时间:2023-12-04 14:09:24 25 4
gpt4 key购买 nike

在 Oracle 中的两个结构相同的表之间执行“差异”的最佳方法是什么?它们在两个不同的模式中(彼此可见)。

谢谢,

最佳答案

如果你没有像 PLSQL developer 这样的工具,你可以完全外连接两个表。如果他们有主键,您可以在连接中使用它。这将使您即时查看任一表中丢失的记录。
然后,对于两个表中确实存在的记录,您可以比较每个字段。您应该注意,您不能将 null 与常规 = 运算符进行比较,因此如果两个字段都为 null,则检查 table1.field1 = table2.field1 将返回 false。因此,您必须检查每个字段是否与另一个表中的值相同,或者两者都为空。

您的查询可能如下所示(返回不匹配的记录):

select
*
from
table1 t1
full outer join table2 t2 on t2.id = t1.id
where
-- Only one record exists
t1.id is null or t2.id is null or
( -- The not = takes care of one of the fields being null
not (t1.field1 = t2.field1) and
-- and they cannot both be null
(t1.field1 is not null or t2.field1 is not null)
)

您必须为每个字段复制该 field1 条件。当然,您可以编写一个函数来比较字段数据以简化查询,但您应该记住,当您需要比较两个大表时,这可能会显着降低性能。

如果您的表没有主键,您将需要交叉连接它们并对每个结果记录执行这些检查。您可以通过在每个必填字段上使用完全外连接来加快速度,因为它不能为空,因此可以在连接中使用。

关于sql - Oracle 中的表 "Diff",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4514935/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com