Re: Verwendung von Spaltenname in NOT LIKE Abfrage

From: Sven Arkasmussen (sven.arkasmussen_at_telering.at)
Date: 05/03/04


Date: Mon, 03 May 2004 16:41:31 +0200

Ulrich Sommer schrieb:

> Ich habe eine Tabelle Tabelle 1, in der ich eine Reihe
> von text strings NICHT angezeigt bekommen möchte, die
> bestimmte Worte enthalten.
>
> Tabelle 1
>
> Adobe Acrobat 5.0
> Adobe Acrobat Reader 5.0
> Adobe Acrobat Reader 6.0
> Quick Time 2.0
> Quick Time Player 2.0
>
>
>
> Diese Worte habe ich in einer zweiten Tabelle Tabelle 2
> abgelegt.
>
> Tabelle 2
>
> Player
> Reader
>
> Ergebnis soll sein:
>
> Adobe Acrobat 5.0
> Quick Time 2.0
>
> Ich möchte keine Liste von Worten in die Abfrage selbst
> einfügen
> (wie z.B. NOT LIKE "*Reader*" AND LOT LIKE "*Player*")

Aber wenigstens hast du da noch * aussen um die Wörter
gemacht.

> denn die Liste kann sehr lang werden, wahrscheinlich
> mehrere 100 Worte.

Na, hoffentlich spielt Performance dann trotzdem keine
Rolle für dich ...

> Wie muß die entsprechende Query aussehen?

"muss" sehe ich in solchen Zusammenhängen gar nicht gern,
weil es eigentlich nie nur eine einzige Möglichkeit gibt.

> Meine bisherigen Versuche, den Spaltennamen aus Tabelle 2
> direkt zusammen mit NOT LIKE zu verwenden, schlagen fehl,
> z.B.
>
> WHERE (Tabelle1.Textstring) Not Like [Tabelle2].
> [Textstring])

Hier ist auf die Sternchen schon fröhlich gepfiffen. Aber
ohne ist ein LIKE genau so gut wie ein =.

> Kann ich dort etwa nur Text Strings verwenden?

Je nun, andere Strings als Text Strings wird es wohl kaum
geben. Aber auch wenn man anstelle von Literalen aus anderen
Objekten zu entnehmende Werte verwenden will wird es ohne
Wildcards nicht sonderlich toll laufen, also zumindest

    NOT LIKE "*" & [Tabelle2].[Textstring] & "*"

würde es schon heissen müssen. Das aber nur am Rande, weil
das ganze sowieso wenig zielführend wäre, da ja

   "Adobe Acrobat Reader 5.0" NOT LIKE "*Player*"

True ist und somit der Datensatz aus Tabelle1 wiederum
aufscheinen würde, gelle, und das so oft wie es einzelne
Wörter in Tabelle2 gibt, die nicht in Tabelle1.Textstring
vorkommen - ausser natürlich du verwendest DISTINCT, aber
selbst dann beisst die Maus keinen Faden davon ab, *dass*
frisch und fröhlich alle Zeilen aus Tabelle1 aufscheinen
würden.

Ich fürchte fast du brauchst etwas so Superperformantes
wie ein NOT IN auf ein kartesisches Produkt aus Tabelle1
und Tabelle2, also etwa

    SELECT [Tabelle1].[Textstring]
    FROM [Tabelle1]
    WHERE [Tabelle1].[Textstring] NOT IN
    (SELECT DISTINCT [Tabelle1].[Textstring]
     FROM [Tabelle1], [Tabelle2]
     WHERE ([Tabelle1].[Textstring] LIKE
            "*" & [Tabelle2].[Textstring] & "*"););

Entspanntes Warten,

Sven

-- 
Im Übrigen bin ich der Meinung, dass die Groß-/Kleinschreibung
abzuschaffen ist.


Relevant Pages