我们有一个标记特定问题的简单界面
(e.g. entry has 1..many tags and each tag entry has a foriegn key pointer back to the entry table)
1. What is the current production version of the jdk? (Tags: jdk6 jdk-6 jdk java)
2. In what version was java.util.spi package introduced? (Tags: jdk-6, jdk7, jdk5)
3. Which version of java is going to be released soon? (Tags: jdk-6, jdk7, jdk8)
我们想将名为“jdk-6”的所有标签合并到jdk6。我们如何在接近生产但包含有用数据的系统中实现这一目标。
在[1]中需要删除jdk-6,因为jdk6已经存在。在[2,3]中,jdk-6需要重命名为“jdk6”。
我需要哪种脚本才能有效地迁移这些数据。
修改
create table entry (id, question, ...)
create table entry_tag (id, entry_id, tag)
答案 0 :(得分:2)
我会做以下事情:
使用好的标签更新“坏”标签(UPDATE TagTable SET Tag = 'jdk6' WHERE tag = 'jdk-6'
)
删除重复的标签(其中entry_id和Tag相同)。具体如何操作将取决于您是否在桌面上有一个单独的唯一键,但快速谷歌将为您提供在不同情况下工作的各种方法。
假设您有一个包含所有可用标记列表的TagsList表,请从中删除jdk-6(DELETE FROM TagsList WHERE Tag = 'jdk-6'
)。
答案 1 :(得分:0)
我首先创建一个新表,其中包含一个条目ID列表,其中包含标记'jdk-6'或'jdk6'。
然后我会删除标签'jdk6'和'jdk-6'的所有标签记录。
然后我会使用在开始时创建的表格将它们添加回来。
答案 2 :(得分:0)
/* Step 1 - Delete where both tags exist */
delete from et1
from entry_tag et1
inner join entry_tag et2
on et1.entry_id = et2.entry_id
and et2.tag = 'jdk6'
where et1.tag = 'jdk-6'
/* Step 2 - Update remaining tags */
update entry_tag
set tag = 'jdk6'
where tag = 'jdk-6'