MySQL Forums
Forum List  »  German

Daten in kommasepariertem Feld mit REPLACE richtig ersetzen
Posted by: Michael Seidler
Date: January 05, 2021 03:11PM

Ich lerne gern, habe es aber nach einer Woche suchen und Lernen aufgegeben, allein die richtige Lösung zu finden.
Wer kann mir den richtigen Tipp geben, wie es voll funktioniert bzw. was mache ich falsch?

Die Herausforderung:
Ich habe in meiner mySQL-Datenbank zwei Tabellen, in der Tabelle 1 (t1) sind verschiedene Förderregionen der EU, also z.B. INTERREG-Region Ostseeraum (mit 11 Ostsee-Anreinerstaaten und Teilregionen) als Vollname und kommasepariert in einem Feld "eligible_areas".
Da sollen aber nach erfolgreicher Operation stattdessen nicht die Klarnamen stehen, sondern deren IDs stehen.

Die IDs sind in einer zweiten Tabelle (t2) der 1844 Einzelregionen (also Landkreise, Bezirke, Wojwodschaften, Kantone und Hauptstädte), dort allerdings hat jede einzelne Region ihre eigene Zeile.

Mit welchem Code tausche ich in t1 die kommaseparierten Klarnamen mit deren IDs aus t2 aus, so dass statt "Berlin, Mailand, Paris" dann deren IDs like "18, 25, 77" als kommaseparierte Daten in der ursprünglichen Spalte wieder kommasepariert enthalten sind?


Natürlich habe ich mich belesen und eine Woche mit phpmyadmin viele sql-Varianten probiert und bin ja stolz, dass ich Teilerfolge dahingehend erzielt habe, dass das Replacen mit einem Wert schon einmal funktioniert. Weiter komme ich ohne Hilfe nun seit zwei Tagen nicht mehr. Zeit, die Gemeinschaft um Hilfe anzusuchen.


Das sind meine geistigen Ergebnisse für den Wechsel eines Wertes:

UPDATE `programs_interreg_work` AS t1
INNER JOIN regions_eu_members_sich9 AS t2
ON t1.eligible_area = t2.name_lat
SET `eligible_area` = REPLACE(`eligible_area`,
t2.name_lat,
t2.id)

oder auch die Variante:

UPDATE `programs_interreg_work` AS t1
INNER JOIN regions_eu_members_sich9 AS t2
SET `eligible_area` = REPLACE(`eligible_area`,
t2.name_lat,
t2.id)
WHERE LOCATE(name_lat, eligible_area)


Ich würde mich freuen, wenn mir jemand die Arbeit der einzelnen händischen Anpassung erspart und den entscheidenden Tipp beisteuert.

Kleines extra Bonbon. Leider habe ich festgestellt, dass manchmal die Klarnamen zwischen beiden Tabellen doch etwas voneinander abweichen. Gibt es eine Funktion, die da etwas toleranter ist so wie LIKE %.

Manchmal steht Deutschland in t1 und DEUTSCHLAND in t2. Ich habe das mal versucht durch LOWER (siehe nachfolgend), will aber nicht immer (nur manchmal) funktionieren:

UPDATE `programs_interreg_work` AS t1
INNER JOIN regions_eu_members_sich9 AS t2
SET `eligible_area` = REPLACE(`eligible_area`, t2.name_lat, t2.id)
WHERE LOWER(name_lat) LIKE LOWER('Wałbrzyski')


soweit für den Moment und in froher Erwartung

MichaS. ;-)

Options: ReplyQuote


Subject
Views
Written By
Posted
Daten in kommasepariertem Feld mit REPLACE richtig ersetzen
126
January 05, 2021 03:11PM


Sorry, only registered users may post in this forum.

Content reproduced on this site is the property of the respective copyright holders. It is not reviewed in advance by Oracle and does not necessarily represent the opinion of Oracle or any other party.