0

我正在使用以前从未见过的关系构造来构建现有数据库。

我有三张桌子:

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中的数据相关。该字段决定了它是哪一个。我想摆脱这种结构并具有相同的结构。唯一不同的是内容。legend1legend2items.legendlegend1legend2

我想要这个结构:

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;

此查询不起作用,因为它弄乱了引用的 id 来自legend2.

4

1 回答 1

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 表中之后,您可以更新 items 表以设置相应的 legendid

于 2012-04-12T07:30:23.887 回答