2013-03-27 3 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», поскольку это только покажет вам различия в двух файлах. Вам нужно написать приложение, которое фактически анализирует два файла, сравнивает их и создает выходные данные на основе этих различий. – Ian

ответ

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

+0

Я ожидаю, если кто-то знает какой-то предварительно построенный скрипт или код, который это делает! – MJQ