У меня есть эта таблица, у которой нет первичного ключа.Создайте уникальный первичный ключ (хэш) из столбцов базы данных
Я собираюсь вставить некоторые записи в новую таблицу, чтобы проанализировать их, и я собираюсь создать новый первичный ключ со значениями из всех доступных столбцов.
Если бы это был язык программирования, как Java, я бы:
int hash = column1 * 31 + column2 * 31 + column3*31
Или что-то подобное. Но это SQL.
Как создать первичный ключ из значений доступных столбцов? Мне не удастся просто пометить все столбцы как PK, так как мне нужно сравнить их с данными из другой таблицы DB.
В моем столе есть 3 номера и дата.
EDIT Что моя проблема
Я думаю, что немного больше фона необходимо. Прошу прощения за то, что не предоставил его раньше.
У меня есть база данных (dm), которая обновляется каждый день из другого db (исходного источника). Он имеет записи за последние два года.
В прошлом месяце (июль) процесс обновления был нарушен, и в течение месяца данные не обновлялись в дм.
Я вручную создаю таблицу с той же структурой в своем Oracle XE, и я копирую записи из исходного источника в свой db (myxe). Я скопировал только записи с июля, чтобы создать отчет, необходимый к концу месяца ,
Наконец, на август 8 процесс обновления был исправлен, и записи, которые ожидали переноса этого автоматического процесса, были скопированы в базу данных (от originalsource до dm).
Этот процесс очищает исходный источник данных после его копирования (в дм).
Все выглядят прекрасно, но мы просто понимаем, что количество записей заблудился (около 25% в июле)
Итак, что я хочу сделать, это использовать мое резервное копирование (myxe) и вставить в базе данных (дм) отсутствуют все эти записи.
Проблема здесь:
- Они не имеют четко определенного ПК.
- Они находятся в разных базах данных.
Так что я думал, что если бы я мог создать уникальный pk из обеих таблиц, которые дали тот же номер, я мог бы сказать, что пропали без вести и вставить их.
EDIT 2
Так что я сделал следующее в местной среде: (? .. союз)
select a.* from [email protected] a , the_table b where
a.idle = b.idle and
a.activity = b.activity and
a.finishdate = b.finishdate
который возвращает все строки, которые присутствуют в обеих базах данных Я получил 2000 записей.
Что я буду делать дальше, это удалить их все из целевой БД, а затем просто вставить их все с моего дб в целевую таблицу
Я надеюсь, что я не получаю в чем-то худшим: - S: -S
'@ Oscar': имейте в виду, что ваш запрос« EDIT2 »не будет выбирать строки, которые имеют« NULL »в обоих столбцах в обеих таблицах. – Quassnoi
Спасибо за совет ... – OscarRyz