0

我们将把我们有一个枚举的东西改为链接表的 id。

我们会怎么做呢?

我们当前的枚举名称:strat
我们的新链接名称:stratid

我当时的想法是这样的:

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

我还没有创建链接表,现在都是理论。

上面的方法有用吗?
为了从枚举转移到链接表,我应该改变什么吗?

4

2 回答 2

0

除了您之外,没有其他问题可以进行更新需要希望三重确保您的 s 严格按照定义选项link_table.id的顺序填充。table_name.strat

例如,如果stratenum('FOO', 'BAR')那么在linked_table记录中id == 1应该是“FOO”记录。

在那之后,你可能会想要做这个stratid专栏NON NULL;这并不严格等同于您之前的安排,但它可能更接近您想要的。

于 2011-12-15T16:03:08.533 回答
0

是的,先创建链接表,
设置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。
但我认为这是一次性工作,就这样吧!

于 2011-12-15T16:09:54.823 回答