我们将改为将枚举的某些内容更改为链接表的id。从枚举更改为链接表
我们该怎么办?
我们目前的枚举名称:strat
我们的新链接名称:stratid
我在想什么是沿着线的东西:
UPDATE table_name
SET stratid = (SELECT id FROM link_table WHERE stratname = table_name.strat);
我不创建的链接的表格中,现在它全是理论。
请问上述工作?
有什么我应该改变,以便从枚举转移到链接表?
我们将改为将枚举的某些内容更改为链接表的id。从枚举更改为链接表
我们该怎么办?
我们目前的枚举名称:strat
我们的新链接名称:stratid
我在想什么是沿着线的东西:
UPDATE table_name
SET stratid = (SELECT id FROM link_table WHERE stratname = table_name.strat);
我不创建的链接的表格中,现在它全是理论。
请问上述工作?
有什么我应该改变,以便从枚举转移到链接表?
没有陷阱作出比你其他的更新需要想使三重确保您link_table.id
s的在table_name.strat
选项定义的顺序严格填充。
例如,如果strat
是enum('FOO', 'BAR')
那么在linked_table
与id == 1
的记录应该是“FOO”记录。
之后,你可能想制作stratid
列NON NULL
;这并不完全等同于你之前的安排,但它可能更接近你想要的。
是,创建链接表第一,
设置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。
但我认为是一次性工作,所以要做到!
“严格按顺序”是什么意思?会有多个记录使用相同的ID ... – Neal 2011-12-15 16:04:30