Postgres - 使用字典转换列名?

时间:2017-02-15 19:48:00

标签: postgresql psycopg2

我有一个包含FIRSTNAME LASTNAME列的表,我想创建第三列,将这两列合并到FIRSTNAME_LASTNAME中,但是也使用特殊字典来转换某些名称。假设我只想将它应用于FIRSTNAME,例如:

Albert -> Funnyguy, Kathleen -> Nerd, Megan -> Weirdo

所以" Albert Jones"的新专栏行将是" Funnyguy_Jones"。

目前我在psycopg2中通过读取所有行(分批因为数据库很大),使用python字典转换并创建新列,然后使用UPDATE table SET newcol = tmp.newcol FROM (VALUES ...)等发送更新来执行此操作。由于将其读入python,这非常慢。有什么提示吗?

编辑:并非所有名称都有转换(只有10%的名称有转换,对于那些我想保留原始名称的名称)

1 个答案:

答案 0 :(得分:1)

如果left join有匹配COALESCE,则会选择t2.newName,否则您会选择t1.firstName

SELECT t1.firstName,
       t1.lastName,
       COALESCE(t2.newName, t1.firstName) + '_' + t1.lastName as combinedName
FROM firstTable t1
LEFT JOIN newTable t2
       ON t1.firstName = t2.firstName