Guten Abend,
ich erstelle gerade eine DB für alle Adressen der Schweiz. Dazu habe ich eine CSV der Schweizerischen Post erhalten. Da für den Usecase nur ca 10% der enthaltenen Daten verwendet werden, bin ich daran die Datenbank zurechtzustutzen. Die grösste Schwierigkeit - die Schweiz hat für einige Ortsnamen und Strassennamen verschiedene Sprachen. In der Haupttabelle ist jeweils die für den Ort gesprochene Sprache hinterlegt. Die alternativen Sprachen sind in einer zweiten Tabelle enthalten.
Ich habe nun eine case when Abfrage erstellt in Kombination mit LEFT JOIN um alle Sprache in einer Row auszugeben. Dabei ergeben sich zwei Probleme:
Problem 1: Es wird immer Deutsch & Französisch oder Französisch und Italienisch eingetragen. Die jeweils fehlende Sprache wird (wegen JOIN) um eine weitere Zeile beigefügt.
Problem 2: Ich weiss nicht genau wie ich zwei Zeilen aus Tabelle 2 in einem Rutsch in eine Row bekomme.
Was habe ich versucht: Group By. Das wirft jedoch immer eine Fehlermeldung:
(Auch wenn ich den STRICT MODE deaktiviere - erhalte ich nicht das gewünschte Ergebniss)
Nach google und SO habe ich die Group By um alle enthaltenen Feldern erweitert. Dann lässt sich der Query zwar ausführen, aber enthält trotzdem nicht die gewünschte Ergebnisse ( es ist dann nur noch die Französische Variante vorhanden und viele Ergebnisse Fehlen.)
Folgend der Query den ich verwende:
Meine Frage nun: Wie kann ich aus Tabelle_1 eine Zeile ausgeben und diese Zeile mit 2 Tabelleneinträgen von Tabelle_2 ergänzen? Es ist egal, wie langsam die Abfrage ist, da diese nur einmal ausgeführt wird um die Daten in eine neue Tabelle umzuschreiben. Oder ist mein Weg mit Group By die richtige Richtung und mache ich nur was falsch?
Über Hilfe freue ich mich.
Grüsse SoDaho
ich erstelle gerade eine DB für alle Adressen der Schweiz. Dazu habe ich eine CSV der Schweizerischen Post erhalten. Da für den Usecase nur ca 10% der enthaltenen Daten verwendet werden, bin ich daran die Datenbank zurechtzustutzen. Die grösste Schwierigkeit - die Schweiz hat für einige Ortsnamen und Strassennamen verschiedene Sprachen. In der Haupttabelle ist jeweils die für den Ort gesprochene Sprache hinterlegt. Die alternativen Sprachen sind in einer zweiten Tabelle enthalten.
Ich habe nun eine case when Abfrage erstellt in Kombination mit LEFT JOIN um alle Sprache in einer Row auszugeben. Dabei ergeben sich zwei Probleme:
Problem 1: Es wird immer Deutsch & Französisch oder Französisch und Italienisch eingetragen. Die jeweils fehlende Sprache wird (wegen JOIN) um eine weitere Zeile beigefügt.
Problem 2: Ich weiss nicht genau wie ich zwei Zeilen aus Tabelle 2 in einem Rutsch in eine Row bekomme.
Was habe ich versucht: Group By. Das wirft jedoch immer eine Fehlermeldung:
Code:
[42000][1055] Expression #2 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'adressen.NEW_PLZ2.SPRACHCODE' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
Nach google und SO habe ich die Group By um alle enthaltenen Feldern erweitert. Dann lässt sich der Query zwar ausführen, aber enthält trotzdem nicht die gewünschte Ergebnisse ( es ist dann nur noch die Französische Variante vorhanden und viele Ergebnisse Fehlen.)
Folgend der Query den ich verwende:
Code:
SELECT NEW_PLZ1.ONRP, case when NEW_PLZ1.SPRACHCODE = '1' then NEW_PLZ1.ORTBEZ18 when NEW_PLZ2.SPRACHCODE = '1' then NEW_PLZ2.ORTBEZ18 end as 'DE_ORTNAME', case when NEW_PLZ1.SPRACHCODE = '2' then NEW_PLZ1.ORTBEZ18 when NEW_PLZ2.SPRACHCODE = '2' then NEW_PLZ2.ORTBEZ18 end as 'FR_ORTNAME', case when NEW_PLZ1.SPRACHCODE = '3' then NEW_PLZ1.ORTBEZ18 when NEW_PLZ2.SPRACHCODE = '3' then NEW_PLZ2.ORTBEZ18 end as 'IT_ORTNAME' FROM NEW_PLZ1 LEFT JOIN NEW_PLZ2 ON NEW_PLZ1.ONRP = NEW_PLZ2.ONRP group by NEW_PLZ1.ONRP;
Über Hilfe freue ich mich.
Grüsse SoDaho
Kommentar