У меня есть таблица, у которой нет первичного ключа.
Я собираюсь вставить некоторые записи в новую таблицу, чтобы проанализировать их, и я думаю о создании нового первичного ключа со значениями из всех доступных столбцов.
Если бы это был язык программирования, подобный Java, я бы:
int hash = column1 * 31 + column2 * 31 + column3*31
Или что-то в этом роде. Но это SQL.
Как я могу создать первичный ключ из значений доступных столбцов? Мне не удастся просто пометить все столбцы как PK, для этого мне нужно сравнить их с данными из другой таблицы БД.
В моей таблице 3 числа и дата.
РЕДАКТИРОВАТЬ В чем моя проблема
Я думаю, что нужно немного больше фона. Извините, что не предоставил это раньше.
У меня есть база данных (дм), которая обновляется каждый день из другой базы данных (первоисточник). У него есть записи за последние два года.
В прошлом месяце (июль) процесс обновления был прерван, и в течение месяца не было обновлений данных в dm.
Я вручную создаю таблицу с той же структурой в моем Oracle XE и копирую записи из исходного источника в свою базу данных (myxe). Я скопировал только записи с июля, чтобы создать отчет, необходимый к концу месяца.
Наконец, 8 августа процесс обновления был исправлен, и записи, ожидающие переноса этим автоматическим процессом, были скопированы в базу данных (из originalsource в dm).
Этот процесс очищает от исходного источника данные после их копирования (в dm).
Все выглядит хорошо, но мы только что поняли, что количество записей потеряно (около 25% июля)
Итак, я хочу использовать резервную копию (myxe) и вставить в базу данных (dm) все отсутствующие записи.
Проблема здесь:
- У них нет четко определенного ПК.
- Они находятся в отдельных базах данных.
Так что я подумал, что, если бы я мог создать уникальный pk из обеих таблиц, который дал бы одно и то же число, я мог бы сказать, что отсутствовало, и вставить их.
РЕДАКТИРОВАТЬ 2
Итак, я сделал следующее в своей локальной среде:
select a.* from the_table@PRODUCTION a , the_table b where
a.idle = b.idle and
a.activity = b.activity and
a.finishdate = b.finishdate
Который возвращает все строки, которые присутствуют в обеих базах данных (.. union?) У меня есть 2000 записей.
Далее я собираюсь удалить их все из целевой базы данных, а затем просто вставить их все из моей базы данных в целевую таблицу.
Надеюсь, я не попаду в худшее: - S: -S