我有一些巨大的(在1个表中有数百万行)遗留表有几列我应该肯定设置为创建它们时的外键,但没有时间机器,我必须迁移它们。
这些专栏中的内容就像是其他内容的简短“关键”。其中一个新表的一个真实例子是:
+----+-----+---------+
| id | key | name |
+----+-----+---------+
| 1 | bf | BetFair |
| 2 | bd | BetDaq |
+----+-----+---------+
当前表中的当前行有类似的内容,
.
(bet_id=1234, odds=2.1, source='bf')
(bet_id=1235, odds=2.15, source='bd')
.
我希望最终的结果是什么,
.
(bet_id=1234, odds=2.1, source_id=1)
(bet_id=1235, odds=2.15, source_id=2)
.
我知道如何在多个步骤中执行此操作,创建新表,使用GROUP BY
/ DISTINCT
将源表中的所有数据添加到新表中,并最终设置新的外键带有命令的id列,
UPDATE BetsTable SET source_id=1 WHERE source='bf'
,
我只是想知道是否有更多的“一次性”,高效的SQL
命令来一步更新整个表,而不是多个。
答案 0 :(得分:0)
如果您只想更改数据,请尝试以下操作:
UPDATE BetsTable b
JOIN NewTable n ON n.key = b.source
SET b.source = n.id
如果您真的需要将source
列设为外键,则需要先更改它的数据类型。但在这种情况下,我非常确定重建表格会更有效。