Таблица "Diff" в Oracle - PullRequest
       4

Таблица "Diff" в Oracle

4 голосов
/ 23 декабря 2010

Каков наилучший способ выполнить различие между двумя структурно идентичными таблицами в Oracle?они в двух разных схемах (видимых друг другу).

Спасибо,

Ответы [ 2 ]

4 голосов
/ 23 декабря 2010

Предполагая, что вы хотите сравнить данные (diff по целым строкам) в двух таблицах:

  SELECT *
    FROM (SELECT 's1.t' "Row Source", a.*
            FROM (SELECT col1, col2
                    FROM s1.t tbl1
                  MINUS
                  SELECT col1, col2
                    FROM s2.t tbl2) a
          UNION ALL
          SELECT 's2.t', b.*
            FROM (SELECT col1, col2
                    FROM s2.t tbl2
                  MINUS
                  SELECT col1, col2
                    FROM s1.t tbl1) b)
ORDER BY 1;

Подробнее Информация о сравнении двух таблиц.

4 голосов
/ 23 декабря 2010

Если у вас нет такого инструмента, как разработчик 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 для каждого из ваших полей.Конечно, вы могли бы написать функцию для сравнения полевых данных, чтобы упростить ваш запрос, но вы должны иметь в виду, что это может значительно снизить производительность, когда вам нужно сравнить две большие таблицы.первичный ключ, вам нужно будет перекрестно соединить их и выполнить эти проверки для каждой полученной записи.Вы можете немного ускорить это, используя полное внешнее объединение в каждом обязательном поле, потому что оно не может быть нулевым и поэтому может использоваться в соединении.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...