2011-12-15 147 views
0

我們將改爲將枚舉的某些內容更改爲鏈接表的id。從枚舉更改爲鏈接表

我們該怎麼辦?

我們目前的枚舉名稱:strat
我們的新鏈接名稱:stratid

我在想什麼是沿着線的東西:

UPDATE table_name 
SET stratid = (SELECT id FROM link_table WHERE stratname = table_name.strat); 

創建的鏈接的表格中,現在它全是理論。

請問上述工作?
有什麼我應該改變,以便從枚舉轉移到鏈接表?

回答

0

沒有陷阱作出比你其他的更新需要想使三重確保您link_table.id s的在table_name.strat選項定義的順序嚴格填充。

例如,如果stratenum('FOO', 'BAR')那麼在linked_tableid == 1的記錄應該是「FOO」記錄。

之後,你可能想製作stratidNON NULL;這並不完全等同於你之前的安排,但它可能更接近你想要的。

+0

「嚴格按順序」是什麼意思?會有多個記錄使用相同的ID ... – Neal 2011-12-15 16:04:30

0

是,創建鏈接表第一,
設置stratname獨特,
使用自動增量ID

用於插入link_table懶惰的解決方案:

insert into link_table 
select distinct strat from table_name order by strat; 

但是,我不知道是所有預定義的枚舉正在使用。

此外,不知道枚舉的大小,
我不能建議你做一個手動插入。

如果你看一下枚舉...

enum('...', '...', ...) <-- is just a comma separated value 

所以,這裏是查詢來獲取CSV: -

select column_type from information_schema.columns 
where schema_name="table_name" and column_name = "strat"; 

您可以用編程語言結合起來,做link_table插入。

最後,您的UPDATE查詢不是非常優化,您可以切換到使用INNER JOIN。
但我認爲是一次性工作,所以要做到!