什么是计算MySQL之间的差异(在某种意义上应该从一个表中添加和删除哪些内容以获得另一个表)的好方法?
到目前为止发布的答案(来自BrynJ和Vadim)都没有做得非常彻底.做彻底的工作也非常困难.两个答案都假设知道每个表中存在哪些ID号就足够了.但是,通常,表具有多个列.
我们打电话给表A和B.
一个重要的问题是"两个表是否具有相同的模式"?如果没有,那么一个问题是哪些列需要添加到A,哪些需要添加到B以使它们的模式相同.这是一个元数据查询,可以从系统目录中查询.应该在添加到表中的列中插入哪些值是一个有趣的问题.
让我们假设这些表实际上具有相同的模式,包括相同的主键和列之间相同的功能依赖性.我们还假设有一个ID列(存储一个唯一的整数),Name列(一个字符串)和一个DATE类型的RefDate列.
Table A Table B ID Name RefDate ID Name RefDate 1 Frederick 2007-01-23 1 Josephine 2009-01-10
现在,需要从每个表中插入,删除,更新哪些内容才能使它们相同?
我认为可以公平地说,如果不了解更多的背景,就没有单一的答案.可能是弗雷德里克自2007年以来经历过性别变化手术,B中的记录代表了她的新身份.或者这可能是一个大错; 数据库不应存储这两个记录.或者可能有另一种解决方案.
不幸的是,来自BrynJ和Vadim的查询都表明A和B之间没有区别,这对我来说是一个可疑的命题.
顺便提一下,请注意,当行可能具有空值时比较行比不行时更复杂.例如,考虑比较名称:
没有空:
(A.Name = B.Name)
使用nulls:
(A.Name = B.Name OR (A.Name IS NULL AND B.Name IS NULL))
无论何时你都可以避免空值的另一个原因.