2013-03-27 64 views
0

我想獲得兩個sql轉儲的區別。我必須將差異保存在一個新文件中。區別應該是合法查詢!舉例來說,如果我有以下內容的文件,獲取兩個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); 

那麼這怎麼可能? ??

+1

在維護適當的查詢的同時,沒有辦法對兩個文件執行diff操作,只保留diff。這違背了「差異」的性質,因爲它只會顯示兩個文件中的差異。您需要編寫一個實際解析這兩個文件的應用程序,對它們進行比較並根據這些差異創建輸出。 – Ian 2013-03-27 14:01:10

回答

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語句將這些結果插入另一個表格 - 或任何地方。

+0

你期待有人在這裏給你寫一個應用程序來爲你做這個嗎? – Ian 2013-03-27 13:59:09

+0

我希望如果有人知道一些預先構建的腳本或代碼能夠做到這一點! – MJQ 2013-03-27 14:16:56