Если у вас нет такого инструмента, как разработчик PLSQL, вы можете полностью объединить две таблицы.Если у них есть первичный ключ, вы можете использовать его в соединении.Это даст вам мгновенное представление о записях, отсутствующих в обеих таблицах.Затем для записей, которые существуют в обеих таблицах, вы можете сравнить каждое из полей.Вы должны заметить, что вы не можете сравнить ноль с регулярным оператором =, поэтому проверка - table1.field1 = table2.field1 вернет false, если оба поля равны нулю.Таким образом, вам придется проверять каждое поле, имеет ли оно то же значение, что и в другой таблице, или оба имеют нулевое значение.
Ваш запрос может выглядеть следующим образом (для возврата записей, которые не совпадают):
select
*
from
table1 t1
full outer join table2 t2 on t2.id = t1.id
where
-- Only one record exists
t1.id is null or t2.id is null or
( -- The not = takes care of one of the fields being null
not (t1.field1 = t2.field1) and
-- and they cannot both be null
(t1.field1 is not null or t2.field1 is not null)
)
Вам придется скопировать это условие field1 для каждого из ваших полей.Конечно, вы могли бы написать функцию для сравнения полевых данных, чтобы упростить ваш запрос, но вы должны иметь в виду, что это может значительно снизить производительность, когда вам нужно сравнить две большие таблицы.первичный ключ, вам нужно будет перекрестно соединить их и выполнить эти проверки для каждой полученной записи.Вы можете немного ускорить это, используя полное внешнее объединение в каждом обязательном поле, потому что оно не может быть нулевым и поэтому может использоваться в соединении.