我在现有数据库的基础上构建了以前从未见过的关系结构。

我有三个表:

legend1
legid       INT(11), AUTO_INCREMENT, PRIMARY
description VARCHAR(255)

legend2
legid       INT(11), AUTO_INCREMENT, PRIMARY
description VARCHAR(255)

items
id          INT(11), AUTO_INCREMENT, PRIMARY
name        VARCHAR(255)
legid       INT(11)
legend      VARCHAR(8)


items中的每个记录都与legend1legend2中的数据相关。
字段items.legend确定是哪一个。我想摆脱这种构造,因为legend1legend2具有相同的结构。唯一不同的是内容。

我想要这样的构造:

legend
legid       INT(11), AUTO_INCREMENT, PRIMARY
description VARCHAR(255)

items
id          INT(11), AUTO_INCREMENT, PRIMARY
name        VARCHAR(255)
legid       INT(11)


问题在于表已满,并且没有数据可能丢失。两个表的id都从1开始,因此几乎每个主键都会发生冲突。

我有这个查询:

INSERT INTO legend1 (description) SELECT description FROM legend2;


该查询无效,因为它弄乱了legend2中引用的ID。

最佳答案

执行插入查询后:

INSERT INTO legend1 (description) SELECT description FROM legend2;

执行以下查询

UPDATE items SET legid = (SELECT legid FROM legend1 WHERE legend1.description = items.description) WHERE legend ='something to define that it is from the legend2 table'

请注意,我还没有尝试过查询,但是解决方案有点像这样。如果您发现了语法错误,我确定它会起作用。

它的作用如下:
将整个legend2表插入到legend1表中后,更新项目表以设置相应的legendid

08-16 08:23