2012-04-12 182 views
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每條記錄​​涉及任何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。

+0

你有legend1任何重複的描述和legend2? – 2012-04-12 07:25:14

+0

目前沒有重複的描述,但可能在將來。 – ONOZ 2012-04-12 07:26:50

+0

指定表中的描述列,比如'legend1'.'description' AS'legend1_desc' – 2012-04-12 07:29:12

回答

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

+0

嗯,WHERE legend1.description = items.legid應該在大多數情況下不返回任何內容,因爲描述是一個VARCHAR,並且legid是一個INT。 – ONOZ 2012-04-12 07:36:54

+0

但我看到你在那裏做了什麼!它應該是legend1.legid然後它的工作。謝謝! – ONOZ 2012-04-12 07:38:37

+0

你部分正確!我的目的確實是錯的,但我認爲它應該是legend1.description = items.description – 2012-04-12 07:56:24