我需要 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
更新 tmp where name in (select name from new)
3.将不同的“名称”(旧与新)插入 tmp 并分配新 ID
insert into tmp (name version status lastupdate ID) set idvar = max(select max(id) from tmp) + 1 select * from (select new.name new.version new.status new.lastupdate new.ID from old, new where旧名称 <> 新名称)
4.从tmp表中删除已删除的条目(如B)
从 tmp where 中删除(选择 ???)