Zvoni
Erfahrenes Mitglied
Hallo zusammen,
wer kennt nicht das Problem, dass man eine Spalte mit mehreren Wildcard-Filtern vergleichen will?
Dies resultiert in der Regel in solchen Konstrukten:
weil ein "SELECT ...... FROM ..... WHERE EineSpalte LIKE IN ("Wert1%", "%Wert2", "%Wert3%")" nicht funktioniert
Jetzt bin beim rumstöbern auf folgenden interessanten Sachverhalt gestossen:
Der LIKE-Operator kann auch auf eine Spalte angewendet werden.
Also in der Art:
Bemerkung: Kann auf eine Spalte in derselben Tabelle gehen, oder auf eine Spalte in einer anderen Tabelle
Daraufhin bin ich auf folgende Idee gekommen:
Und.... es funktioniert.
Mir ist natürlich klar, dass dies mit Parametern dann nur schwer umzusetzen ist (wenn überhaupt),
aber dafür bleibt dann immer noch die "Lösung" mit einer temp. Tabelle:
1) Erzeuge temp. Tabelle mit einer (Text-) Spalte (oder die Tabelle ist einfach vorhanden, aber am Anfang immer leer)
2) Mache die INSERTS in die temp. Tabelle mit Parametern (Wahrscheinlich in einer Schleife)
3) Führe das Query wie im zweiten Codeblock aus
4) Lösche/Leere temp. Tabelle
In allen Varianten ist das "DISTINCT" wichtig. In meinem Beispiel würde es für "Hello World" zwei Ergebnisse geben ohne DISTINCT.
Viel Spass
wer kennt nicht das Problem, dass man eine Spalte mit mehreren Wildcard-Filtern vergleichen will?
Dies resultiert in der Regel in solchen Konstrukten:
SQL:
SELECT DISTINCT SomeTextField
FROM Table
WHERE
SomeTextField LIKE 'Wert1%' OR
SomeTextField LIKE '%Wert2' OR
SomeTextField LIKE '%Wert3%'
Jetzt bin beim rumstöbern auf folgenden interessanten Sachverhalt gestossen:
Der LIKE-Operator kann auch auf eine Spalte angewendet werden.
Also in der Art:
SQL:
SELECT DISTINCT
t1.SomeTextField FROM tbl_test As T1
INNER JOIN tbl_test As t2
ON t1.SomeTextField LIKE t2.SomeOtherTextField
Daraufhin bin ich auf folgende Idee gekommen:
SQL:
WITH cte(X) AS (
SELECT 'Text%' UNION
SELECT 'Hello%' UNION
SELECT '%World%')
SELECT DISTINCT
t.SomeTextField
FROM tbl_test As t
INNER JOIN cte As c
ON t.SomeTextField LIKE c.x
Mir ist natürlich klar, dass dies mit Parametern dann nur schwer umzusetzen ist (wenn überhaupt),
aber dafür bleibt dann immer noch die "Lösung" mit einer temp. Tabelle:
1) Erzeuge temp. Tabelle mit einer (Text-) Spalte (oder die Tabelle ist einfach vorhanden, aber am Anfang immer leer)
2) Mache die INSERTS in die temp. Tabelle mit Parametern (Wahrscheinlich in einer Schleife)
3) Führe das Query wie im zweiten Codeblock aus
4) Lösche/Leere temp. Tabelle
In allen Varianten ist das "DISTINCT" wichtig. In meinem Beispiel würde es für "Hello World" zwei Ergebnisse geben ohne DISTINCT.
Viel Spass