Oracle SQL находит разные значения в двух таблицах с одинаковой схемой - PullRequest
1 голос
/ 05 декабря 2010

Хотя были некоторые похожие вопросы, я не мог найти решение именно для моей проблемы.

У меня есть две таблицы 'новая', 'старая' и обе имеют одинаковую схему col1, col2, col3.

Обе записи не обязательно должны иметь одинаковые записи, особенно новые могут иметь больше записей, чем старые.

Теперь я ищу запрос, возвращающий все записи, где new.col3отличается от old.col3 (а new.col1 равно old.col1).col3 может иметь разные значения или ноль.col1 не является PK, поэтому может быть несколько записей с одинаковым значением col1.

Все мои попытки использовать минусы в разных комбинациях либо не привели ко всем изменениям, либо включали строки как со старыми, так и со старыми.новое значение col3.Мне нужно / нужно, чтобы результат содержал new.col1, new.col3 для всех измененных значений col3, как описано выше.

Любая помощь очень ценится;)

Ответы [ 2 ]

2 голосов
/ 05 декабря 2010

Следующее будет находить все строки в new_table таким образом, чтобы в old_table существовала хотя бы одна строка с другим значением для col3.

select a.col1
      ,a.col3
  from new_table a
 where exists(select 'x' 
                from old_table b 
               where a.col1 = b.col1
                 and decode(a.col3, b.col3, 'same', 'diff') = 'diff'
              );
0 голосов
/ 05 декабря 2010

Если неважно, что находится в столбце col2, и вы не хотите, чтобы в результате были удалены удаленные элементы (элементы, находящиеся в старых, но не в новых), это может помочь:

select new.col1, new.col3 from new 
where new.col3 not in (select old.col3 from old where old.col1 = new.col1)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...