2013-05-08 4 views
0

У меня есть 2 таблицы в 2 разных базах данных. Название столбцов и все совпадают. Как выполнить запрос, чтобы увидеть данные в обеих таблицах, идентичны. Мне нужно проверить каждую строку.Сравнить 2 идентичные таблицы для разности данных

+0

экспорт таблиц данных в файлы, а затем белый скрипт для их сравнения. – Kasyx

ответ

1

Если все, что вам нужно, это да/нет ответа для всего набора данных, и есть по крайней мере один ключ в таблице, выполнить внутреннее соединение, используя все столбцы, и проверить число возвращаемых строк равно числу строк в каждой таблице.

select 
    count(*) 
from 
    a 
    inner join b 
on 
    a.c1 = b.c1 and 
    a.c2 = b.c2 and 
    a.c3 = b.c3 

Если вам нужны конкретные строки, которые отличаются от каждой таблицы, как нормализованной результат, то вам необходимо несколько (по крайней мере, 2) выбирает один, чтобы получить уникальный (непересекающихся) строки из каждой таблицы , Из-за того, что таблицы являются одинаковыми схемами, вы можете легко объединить их и проецировать столбец исходной таблицы в результаты, указывая, в какой таблице возникает каждая строка.

Если вам необходимо сопоставить полученные различия с ключом (как при поиске до/после редактирования, включая изменения содержимого строки, добавления строк и удаления строк), а ваша СУБД поддерживает полное внешнее соединение, вы можете выполнить полный внешнее соединение на ключе, возвращающее только результаты, где не все столбцы равны. Обратите внимание, что предполагается, что при удалении ключи не будут повторно использоваться.

SELECT * 
FROM a 
FULL OUTER JOIN b 
ON a.PK = b.PK 
WHERE 
    a.c1 <> b.c1 OR 
    a.c2 <> b.c2 OR 
    a.c3 <> b.c3 

Обратите внимание приведенный выше пример также предполагает два нулевые значения равны сравнить, как это можно сделать с помощью MS SQL «SET ANSI NULLS OFF». Это было просто быстрее, чтобы выразить это.

Смежные вопросы