Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 Подскажите, как лучше определить дубли при добавлении/обновлении данных?  [new]
Alibek B.
Member

Откуда:
Сообщений: 3721
Нужно выполнить сложный SQL-запрос и его результаты поместить во вспомогательную таблицу.
Во вспомогательной таблице записи должны быть уникальными, но в результатах исходного SQL-запроса возможно удвоение некоторых строк (в удвоенных строках те значения, которые помещаются во вспомогательную таблицу, полностью совпадают).
Дублирование строк это не исключительная ситуация, она теоретически возможна, но обычно указывает на некоторые некорректности в исходных данных. Поэтому эту ситуацию я хотел бы иметь возможность обнаружить.
Для этого я добавил во вспомогательную таблицу числовое необязательное поле CNT и провожу обновление данных так:
merge into TMP_TABLE D
using (
...
  ) S on (S.ACCIDENT_ID = D.ACCIDENT_ID and S.CUSTOMER_ID = D.CUSTOMER_ID)
  when not matched then
    insert (D.ACCIDENT_ID, D.CUSTOMER_ID, D.GROUP_ID, D.INFO_ADDRESS, D.INFO_ACCESS, D.INFO_CLIENT)
    values (S.ACCIDENT_ID, S.CUSTOMER_ID, S.GROUP_ID, S.INFO_ADDRESS, S.INFO_ACCESS, S.INFO_CLIENT)
  when matched then update set D.CNT = nvl(D.CNT,1) + 1

То есть количество дублей (если они будут) я увижу в поле CNT.
Это будет работать? Или подсчет дублей нужно делать отдельным запросом, перед merge?

________________________
Мы смотрим с оптимизмом...
...в оптический прицел.
4 окт 16, 11:47    [19741028]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите, как лучше определить дубли при добавлении/обновлении данных?  [new]
д0k
Guest
Alibek B.
Нужно выполнить сложный SQL-запрос и его результаты поместить во вспомогательную таблицу.
Во вспомогательной таблице записи должны быть уникальными, но в результатах исходного SQL-запроса возможно удвоение некоторых строк (в удвоенных строках те значения, которые помещаются во вспомогательную таблицу, полностью совпадают).
Дублирование строк это не исключительная ситуация, она теоретически возможна, но обычно указывает на некоторые некорректности в исходных данных. Поэтому эту ситуацию я хотел бы иметь возможность обнаружить.
Для этого я добавил во вспомогательную таблицу числовое необязательное поле CNT и провожу обновление данных так:
merge into TMP_TABLE D
using (
...
  ) S on (S.ACCIDENT_ID = D.ACCIDENT_ID and S.CUSTOMER_ID = D.CUSTOMER_ID)
  when not matched then
    insert (D.ACCIDENT_ID, D.CUSTOMER_ID, D.GROUP_ID, D.INFO_ADDRESS, D.INFO_ACCESS, D.INFO_CLIENT)
    values (S.ACCIDENT_ID, S.CUSTOMER_ID, S.GROUP_ID, S.INFO_ADDRESS, S.INFO_ACCESS, S.INFO_CLIENT)
  when matched then update set D.CNT = nvl(D.CNT,1) + 1

То есть количество дублей (если они будут) я увижу в поле CNT.
Это будет работать? Или подсчет дублей нужно делать отдельным запросом, перед merge?



RTFM


Alibek B.
________________________
Мы смотрим с оптимизмом...
...в оптический прицел.


собощил модератору о ксенофобии...
4 окт 16, 12:42    [19741428]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить