我们将把我们有一个枚举的东西改为链接表的 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);
我还没有创建链接表,现在都是理论。
上面的方法有用吗?
为了从枚举转移到链接表,我应该改变什么吗?
除了您之外,没有其他问题可以进行更新需要希望三重确保您的 s 严格按照定义选项link_table.id
的顺序填充。table_name.strat
例如,如果strat
是enum('FOO', 'BAR')
那么在linked_table
记录中id == 1
应该是“FOO”记录。
在那之后,你可能会想要做这个stratid
专栏NON NULL
;这并不严格等同于您之前的安排,但它可能更接近您想要的。
是的,先创建链接表,
设置stratname为唯一,
使用自增ID
插入链接表的惰性解决方案:
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。
但我认为这是一次性工作,就这样吧!