基本上,我们有一个表(original table),并将其备份到另一个表(backup table)中。因此,两个表具有完全相同的架构。

首先,两个表(original tablebackup table)都包含完全相同的数据集。经过一段时间后,出于某种原因,我需要验证original table中的数据集是否已更改。

为此,我必须将original table中的数据集与backup table进行比较。

假设original table具有以下架构:

create table LemmasMapping (
   lemma1 int,
   lemma2 int,
   index ix_lemma1 using btree (lemma1),
   index ix_lemma2 using btree (lemma2)
)

如何实现数据集比较?

更新:表没有主键。它只是存储两个ID之间的映射。

最佳答案

我会写三个查询。

  • 内部联接,用于拾取两个表中主键都存在的行,但是其他一个或多个列的值存在差异。这将获取原始的更改的行。
  • 左外部联接,用于拾取原始表中而不是备份表中的行(即原始行中的主键在备份中不存在)。这将返回插入到原始行中的行。
  • 右外部联接,用于选择备份中原来不再存在的行。这将返回从原始行中删除的行。

  • 您可以将三个查询合并在一起以返回单个结果集。如果这样做,则需要添加一列以指示它是哪种类型的行(更新,插入或删除)。

    稍加努力,您便可以使用完整的外部联接在一个查询中执行此操作。小心外部联接,因为它们在不同的SQL引擎中的行为不同。谓词放在where子句中,而不是join子句中,有时会使您的外部联接变成内部联接。

    关于mysql - 如何验证两个表是否具有完全相同的数据?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2129717/

    10-16 23:05