我需要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 - 名称映射关系,无论以后数据如何更改,也就是名称始终具有绑定它的唯一ID号.
如果条目已更新,则更新数据,如果条目是新添加的,则插入表格,然后提供新分配的唯一ID.如果该条目已删除,请删除该条目,稍后不要重复使用该ID.
但是,我只能使用带有简单选择或更新语句的SQL,那么我可能很难编写这样的代码,那么我希望有专业知识的人可以给出方向,不需要有关SQL变体,标准sql代码的详细信息.样品就够了.
提前致谢!
RGS
KC
========我在这里列出了我的草稿sql,但不确定它是否有效,有些专业人士请评论,谢谢!
1.将旧表作为tmp用于商店更新将表tmp创建为select*from old
2.更新到tmp,其中"name"在旧表和新表中相同更新tmp其中的名称(从新选择名称)
3.将不同的"名称"(旧的与新的)插入tmp并分配新的ID插入到tmp(名称版本状态lastupdate ID)set idvar = max(从tmp中选择max(id))+ 1 select*from(select new.name new.version new.status new.lastupdate new.ID from old,new where old.name <> new.name)
4.从tmp表中删除已删除的条目(例如B)从tmp中删除(选择???)