0

2 つの 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);

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

どちらのテーブルも重複していないと仮定した場合の 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 に答える