Hallo,
habe folgenden Code: (er funktioniert wunderbar)
SELECT *
FROM Tabelle
WHERE Spalte_1 IN (SELECT Spalte_x FROM Tabelle_2);
Er zeigt mir nur die Zeilen der Spalte_1 die mit der Spalte_x übereinstimmen.
Problem: Er macht es 1 zu 1. Ich möchte aber nun LIKE '%' .... '%' hinzufügen. Sodass es auch in der mitte des Feldes die Übereinstimmung erkennt.
Habe es so probiert:
SELECT *
FROM Tabelle
WHERE Spalte_1 Like '%' + (IN (SELECT Spalte_x FROM Tabelle_2)) + '%';
leider war es nicht ganz korrekt.
Gibt es einen anderen Ansatz?
Hallo,
etwa so:
Select * From Tabelle Inner Join Tabelle_2 on Tabelle.Spalte_1 like "*" & Tabelle_2.Spalte_x & "*"
Hallo,
Nur damit es keine Verwirrungen gibt:
"%" auf SQL-Servern
"*" bei JET-Datenbanken
gruss ekkehard
Vielen Dank,
dieser Code funktioniert super:
Select * From Tabelle Inner Join Tabelle_2 on Tabelle.Spalte_1 like "*" & Tabelle_2.Spalte_x & "*"
Nun wie könnte man jetzt die beiden kombinieren, so dass das Ergebnis vom ersten und das Ergebnis vom zweiten in einer Abfrage erscheinen.
Das war noch mal der erste der die 1 zu 1 Suche durchgeführt hat:
SELECT *
FROM Tabelle
WHERE Spalte_1 IN (SELECT Spalte_x FROM Tabelle_2);
Nun möchte ich die 1 zu 1 Suche, und die andere kombinieren?
Kann man bei dem Inner Join eine AND funktion verwenden, hat leider nicht geklappt bei mir.
Möchte diese Variante der "1 zu 1 Suche" hinzufügen:
Tabelle.Spalte_1=Tabelle_2.Spalte_X
Hallo,
was willst Du denn damit überhaupt erreichen?
Es ergäbe auch keine anderen Datensätze.....
Select * From Tabelle Inner Join Tabelle_2 on Tabelle.Spalte_1 like "*" & Tabelle_2.Spalte_x & "*"
Union
SELECT * FROM Tabelle WHERE Spalte_1 IN (SELECT Spalte_x FROM Tabelle_2)
Hallo,
Zitat von: Kloso am November 02, 2016, 11:32:38
so dass das Ergebnis vom ersten und das Ergebnis vom zweiten in einer Abfrage erscheinen
das Ergebnis der ersten Abfrage sollte eigentlich im Ergebnis der zweiten Abfrage enthalten sein.
DF6GL danke, es hat geklappt.
Doch, es bleiben die Datensätze die nicht übereinstimmen, den in Tabelle in der Spalte_1 sind auch Datensätze die nicht in der Spalte_X vorhanden sind, dann müssen sie auch nicht angezeigt werden.
Bsp.:
Spalte_1:
Hallo Welt
Hallo Welt mein Haus
Haus ist grün
Katze ist grau
Himmel ist blau
Spalte_x:
grün
mein Haus
Hund ist gelb
Himmel ist blau
Ergebnis mit meinem SQL:
Hallo Welt mein Haus
Haus ist grün
Himmel ist blau
"Hallo Welt" und "Katze ist grau" werden nicht angezeigt weil es keine Übereinstimmung mit Spalte_x gibt.
Klappt wunderbar. Vielen Dank für die Hilfe :)
MaggieMay, leider nein. Die Abfrage hatte mir nur die Ergebnisse geliefert, wo auch etwas links und rechts gestanden ist.
Dann hast du vielleicht doch das falsche Suchmuster verwendet.
Wie wär's mit dem ursprünglich verwendeten "%"-Zeichen?!
MaggieMay habs eben so so und so ausprobiert, :)
Es funktioniert mit '*' + .... + '*'
Jedoch gibt es da ein kleinen Hacken, wenn in der Tabelle_2 ein alleinstehenden Kürzel gibt (z.Bsp AR) in einem Feld, dann spuckt er mir aus der Tabelle_1: "Haribo" raus, weil er ar darin erkennt.
Wenn ich aber mit '* ' + .... + ' *' es mache, dann spuckt er mir zwar "Haribo" nicht raus, was auch gut ist, aber dann leider kein Feld in welchem nur "AR" steht, weil er ein leerzeichen davor und danach erwaret.
Also denke ich dass es erstmal nur so möglich wäre alles richtig darzustellen in dem man mehrere Unions verknüpft:
1) '* ' + .... + ' *' UNION
2) '*' + .... UNION
3) .... + '*' UNION
4) ....=....
Dann geht es zwar, sieht aber sehr unübersichtlich aus.
PS:
mit % hat er leider überhaupt nichts angezeigt.
Eine nicht unwichtige "Nebensache", dass du auch Leerzeichen im Like-Ausdruck verwendest. ;)
In den bisher gezeigten Codes war das nirgends zu sehen.
Statt Union kannst du auch OR verwenden.
Select * From Tabelle Inner Join Tabelle_2 on (
Tabelle.Spalte_1 like "* " & Tabelle_2.Spalte_x & " *"
OR
Tabelle.Spalte_1 like "* " & Tabelle_2.Spalte_x
OR
Tabelle.Spalte_1 like Tabelle_2.Spalte_x & " *"
OR
Tabelle.Spalte_1 = Tabelle_2.Spalte_x
)
Bin mir aber nicht sicher, ob Jet das kann.
Falls nicht, in den Where-Teil verlagern:
Select Tabelle.* From Tabelle, Tabelle_2
where
Tabelle.Spalte_1 like "* " & Tabelle_2.Spalte_x & " *"
OR
Tabelle.Spalte_1 like "* " & Tabelle_2.Spalte_x
OR
Tabelle.Spalte_1 like Tabelle_2.Spalte_x & " *"
OR
Tabelle.Spalte_1 = Tabelle_2.Spalte_x
Und da das sowieso zum Table-Scan in "Tabelle" führt, kann man auch gleich auf die "Suchbremse" drücken:
Select Tabelle.* From Tabelle, Tabelle_2
where
" " & Tabelle.Spalte_1 & " " like "* " & Tabelle_2.Spalte_x & " *"
bzw.
Select Tabelle.* From Tabelle inner join Tabelle_2 ON
" " & Tabelle.Spalte_1 & " " like "* " & Tabelle_2.Spalte_x & " *"
mfg
Josef
Hallo Josef P.,
vielen Dank auch an dich, habe alle 4 optionen ausprobiert. Alle funktionieren und alle bringen das gleiche richtige ergebnis.
Ihr schreibt alle dieses Zeichen &, bei mir bringt es aber ein sehr erschreckendes Ergebnis von über 100 000 tausend einträgen an dem jedes Feld tausende Male aufgelistet ist. Ich benutze das + Zeichen anstatt &, dann funktionierts problemlos.
ZitatIhr schreibt alle dieses Zeichen &, bei mir bringt es aber ein sehr erschreckendes Ergebnis von über 100 000 tausend einträgen an dem jedes Feld tausende Male aufgelistet ist. Ich benutze das + Zeichen anstatt &, dann funktionierts problemlos.
Weil du mit + die NULL-Werte eliminierst, da mit Null ein Like-Vergleich keinen Treffer bringt. Du hast vermutlich einige NULL-Werte in den verwendeten Datenfeldern.
'abc' + NULL + 'xyz' ergibt NULL
'abc' & NULL & 'xyz' ergibt 'abcxyz'
MIt dem & kann z. B. folgender Vergleich entstehen:
... like "* *"
or
... like "* "
usw. So kann ein leeres Feld in der Filterwert-Tabelle natürlich zu vielen Treffern führen.
Allerdings stelle ich mir dann die Frage, ob das ein korrekter Eintrag in einer Tabelle ist, die Filterwerte enthält.
mfg
Josef