0

我想得到两个 sql 转储的区别。我必须将差异保存在一个新文件中。区别应该是合法查询!例如,如果我有一个包含以下内容的文件,

CREATE TABLE IF NOT EXISTS `newtable` (
  `name` int(11) NOT NULL AUTO_INCREMENT,
  `id` int(11) NOT NULL,
  PRIMARY KEY (`name`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=2 ;

INSERT INTO `newtable` (`name`, `id`) VALUES
(1, 2);

和第二个文件,

CREATE TABLE IF NOT EXISTS `newtable` (
  `name` int(11) NOT NULL AUTO_INCREMENT,
  `id` int(11) NOT NULL,
  PRIMARY KEY (`name`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=2 ;

INSERT INTO `newtable` (`name`, `id`) VALUES
(1, 2),
(4, 5);

然后我会得到,

INSERT INTO `newtable` (`name`, `id`) VALUES
(1, 2),
(4, 5);

那么这怎么可能???

4

1 回答 1

1

这是一种方法,假设两个表都没有重复项:

select (case when max(src) = 1 then 'DELETED'
              else 'ADDED'
         end) as what, name, id
from ((select 1 as src, name, id
       from newtable1 t
      ) union all
      (select 2 as src, name, id
       from newtable2 t
      )
     ) t
group by name, id
having count(*) = 1

这将返回该行是从一个表添加还是删除到另一个表。insert您可以使用语句将这些结果插入另一个表或任何地方。

于 2013-03-27T13:54:30.833 回答