我在现有数据库的基础上构建了以前从未见过的关系结构。
我有三个表:
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
中的每个记录都与legend1
或legend2
中的数据相关。字段
items.legend
确定是哪一个。我想摆脱这种构造,因为legend1
和legend2
具有相同的结构。唯一不同的是内容。我想要这样的构造:
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