0

私は、これまでどこにも見たことのない関係構築を備えた既存のデータベースに基づいて構築しています。

私は3つのテーブルを持っています:

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 に答える