Access-o-Mania

Access-Forum (Deutsch/German) => Tabelle/Abfrage => Thema gestartet von: Kloso am November 02, 2016, 08:40:01

Titel: SQL - IN und LIKE '%' verschachteln möglich?
Beitrag von: Kloso am November 02, 2016, 08:40:01
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?


Titel: Re: SQL - IN und LIKE '%' verschachteln möglich?
Beitrag von: DF6GL am November 02, 2016, 10:05:16
Hallo,

etwa so:

Select * From Tabelle Inner Join Tabelle_2 on Tabelle.Spalte_1 like "*" & Tabelle_2.Spalte_x & "*"
Titel: Re: SQL - IN und LIKE '%' verschachteln möglich?
Beitrag von: Beaker s.a. am November 02, 2016, 11:06:53
Hallo,
Nur damit es keine Verwirrungen gibt:
"%" auf SQL-Servern
"*" bei JET-Datenbanken

gruss ekkehard
Titel: Re: SQL - IN und LIKE '%' verschachteln möglich?
Beitrag von: Kloso am November 02, 2016, 11:32:38
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
Titel: Re: SQL - IN und LIKE '%' verschachteln möglich?
Beitrag von: DF6GL am November 02, 2016, 12:27:58
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)


Titel: Re: SQL - IN und LIKE '%' verschachteln möglich?
Beitrag von: MaggieMay am November 02, 2016, 13:21:12
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.
Titel: Re: SQL - IN und LIKE '%' verschachteln möglich?
Beitrag von: Kloso am November 02, 2016, 13:28:24
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 :)
Titel: Re: SQL - IN und LIKE '%' verschachteln möglich?
Beitrag von: Kloso am November 02, 2016, 13:29:35
MaggieMay, leider nein. Die Abfrage hatte mir nur die Ergebnisse geliefert, wo auch etwas links und rechts gestanden ist.
Titel: Re: SQL - IN und LIKE '%' verschachteln möglich?
Beitrag von: MaggieMay am November 02, 2016, 13:36:22
Dann hast du vielleicht doch das falsche Suchmuster verwendet.
Wie wär's mit dem ursprünglich verwendeten "%"-Zeichen?!
Titel: Re: SQL - IN und LIKE '%' verschachteln möglich?
Beitrag von: Kloso am November 02, 2016, 14:03:53
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.
Titel: Re: SQL - IN und LIKE '%' verschachteln möglich?
Beitrag von: Kloso am November 02, 2016, 14:04:43
PS:
mit % hat er leider überhaupt nichts angezeigt.
Titel: Re: SQL - IN und LIKE '%' verschachteln möglich?
Beitrag von: Josef P. am November 02, 2016, 14:12:20
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
Titel: Re: SQL - IN und LIKE '%' verschachteln möglich?
Beitrag von: Kloso am November 02, 2016, 14:59:32
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.
Titel: Re: SQL - IN und LIKE '%' verschachteln möglich?
Beitrag von: Josef P. am November 02, 2016, 15:36:53
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