Мне нужен код SQL для решения проблемы комбинации таблиц, описанной ниже:
Таблица старых данных: таблица старых
name version status lastupdate ID
A 0.1 on 6/8/2010 1
B 0.1 on 6/8/2010 2
C 0.1 on 6/8/2010 3
D 0.1 on 6/8/2010 4
E 0.1 on 6/8/2010 5
F 0.1 on 6/8/2010 6
G 0.1 on 6/8/2010 7
Таблица новых данных: таблица новых
name version status lastupdate ID
A 0.1 on 6/18/2010
#B entry deleted
C 0.3 on 6/18/2010 #version_updated
C1 0.1 on 6/18/2010 #new_added
D 0.1 on 6/18/2010
E 0.1 off 6/18/2010 #status_updated
F 0.1 on 6/18/2010
G 0.1 on 6/18/2010
H 0.1 on 6/18/2010 #new_added
H1 0.1 on 6/18/2010 #new_added
разница новых данных и старой даты:
B запись удалена
Обновлена версия записи C
Обновлен статус записи E
C1 / H / H1 добавлена новая запись
То, что я хочу, - это всегда сохранять отношение отображения ID-имени в старой таблице данных, независимо от того, как данные изменились позже, a.k.a имя всегда имеет уникальный идентификационный номер, связанный с ним.
Если запись обновлена, обновите данные, если запись добавлена заново, вставьте в таблицу, затем присвойте новый уникальный идентификатор. Если запись была удалена, удалите запись и не используйте этот идентификатор позже.
Тем не менее, я могу использовать SQL только с простым оператором выбора или обновления, тогда мне может быть слишком сложно писать такой код, тогда я надеюсь, что кто-то с опытом может дать указания, никаких подробностей о различных вариантах SQL не требуется SQL-код в качестве образца достаточно.
Заранее спасибо!
RGS
KC
========
Я перечислил мой проект sql здесь, но не уверен, что он работает, кто-то с опытом, пожалуйста, прокомментируйте, спасибо!
1.дублируйте старую таблицу как tmp для обновлений магазина
создать таблицу tmp как
выберите * из старого
2. обновить в tmp, где "имя" одинаково в старой и новой таблицах
обновление tmp
где имя в (выберите имя из новых)
3.внесите другое имя (старое или новое) в tmp и назначьте новый идентификатор
вставить в tmp (имя версии, статус lastupdate ID)
установите idvar = max (выберите max (id) из tmp) + 1
выбрать из
(выберите new.name new.version new.status new.lastupdate new.ID
из старого, нового
где old.name <> new.name)
4. удалить удаленные записи из таблицы tmp (например, B)
удалить из tmp
где
(выберите ???)