Muster (Pattern) übersetzen

Für eine Auswertung sollte ich die Kontoeröffnungen eines bestimmten Zeitraumes Werbepartnern zuordnen. Die Datenbank war aber nicht wirklich gut aufgebaut, die Partner hatten nicht wirklich IDs, da zusätzlich zu unserem Identifikationsmerkmal noch interne IDs des Partners oder auch eigene Unterscheidungsmerkmale vermerkt waren. Ich hatte z.B. solche Einträge:

Konten
Konto Partner
18 222-gp15864
26 222-587
26 222-fb5874

Wenn der Partner mit „222-“ bedeutet dies, dass es Werbung auf Sozialen Netzwerken war. 222-fb bedeutete Facebook und 222-gp bedeutet Google Plus. Diese Muster habe ich erst einmal in eine Tabelle eingefügt:

Partner
pattern partner

222-% Social Media
222-gp% Google Plus
222-fb% Facebook

Und nun zu dem von mir genutzten Statement:

SELECT k.konto, t.partner
FROM konten k
join translation t on k.partner like t.pattern
left join translation t2 on k.partner like t2.pattern and length(t2.pattern) > length(t.pattern)
where t2.pattern is null

Erst einmal verknüpfe ich die Übersetzungstabelle mittels LIKE. Hier erhalte ich jedoch Dubletten, da ja z.B. 222-% als auch 222-fb% auf den Wert 222-fb5874 matchen. Also hole ich mir die Tabelle TRANSLATION noch einmal per LEFT JOIN dazu, mit der Bedingung, dass es hierbei die Länge des Patterns größer ist als das bisher genutzte Muster. Wenn es dieses Muster nicht gibt, habe ich das längste Muster gefunden, das passt – und dann ist t2.pattern leer (also NULL).

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.