编辑:
既然你们建议为玩家/锦标赛名称创建单独的表并用外键替换字符串,我做了以下内容:
SELECT DISTINCT tournament INTO tournaments FROM chess_data2
ALTER TABLE tournaments ADD COLUMN id SERIAL PRIMARY KEY
Run Code Online (Sandbox Code Playgroud)
我为namew和nameb重复了一遍,然后用外键替换字符串.这是它变得棘手的地方 - 我无法在"合法"的时间内完成它.
我尝试了以下两种方法:
1)删除现有索引
1)分别为namew,nameb和锦标赛创建单独的索引
1)运行将我想要的数据插入新表的查询:
SELECT date, whiterank, blackrank, t_round, result,
(SELECT p.id FROM players p WHERE c_d2.namew = p.name) AS whitep,
(SELECT p2.id FROM players p2 WHERE c_d2.nameb = p2.name) AS blackp,
(SELECT t.id FROM tournaments t WHERE t_d2.tournament = t.t_name) AS tournament
INTO final_chess from chess_data2 c_d2
Run Code Online (Sandbox Code Playgroud)
不幸的是它很慢,所以我回到了用户Boris Shchegolev.在评论中,他建议在现有的chess_data2表中创建一个新列并进行更新.所以我做到了:
ALTER TABLE chess_data2 ADD COLUMN name_id INTEGER
UPDATE chess_data2 …Run Code Online (Sandbox Code Playgroud)