2017-02-15 5 views
0

Ich habe eine Tabelle mit Spalten FIRSTNAME LASTNAME und ich möchte eine dritte Spalte erstellen, die diese beiden Spalten in FIRSTNAME_LASTNAME kombiniert, aber ALSO verwendet ein spezielles Wörterbuch, um einige der Namen zu konvertieren. Sagen, dass ich es nur auf den VORNAMEN anwenden möge, z.B .:Postgres - Verwenden Sie ein Wörterbuch, um Spaltennamen zu konvertieren?

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

So würde die neue Spalte für die „Albert Jones“ Reihe „Funnyguy_Jones“ sein.

Derzeit mache ich dies in psycopg2 durch Lesen in allen Zeilen (in Stapeln, weil die db ist riesig), mit einem Python-Wörterbuch zu konvertieren und erstellen Sie die neue Spalte, dann die Updates mit UPDATE table SET newcol = tmp.newcol FROM (VALUES ...) usw. Das ist sehr langsam, weil es in Python gelesen wird. Irgendwelche Tipps?

EDIT: nicht alle Namen haben Umwandlungen (nur wie 10% von ihnen tun, für die ich den ursprünglichen Namen behalten wollen)

+0

das spezielle Wörterbuch ist auch eine Tabelle? –

+0

@JuanCarlosOropeza Ich könnte es als eins einrichten, wenn das einfacher ist. Sagen Sie, VORNAME NEWNAME als die Spalten. – cgreen

Antwort

1

Wenn left join ein Spiel hat COALESCE wird t2.newName wählen, andere weise werden Sie wähle 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 
+0

Ich habe es herausgefunden - danke für deine Hilfe! – cgreen

Verwandte Themen