我正在建立一个现有的数据库,其中包含我以前见过的关系结构。
我有三张桌子:
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。
答案 0 :(得分:1)
执行插入查询后:
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