Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!

Mobiles Hauptmenü

Abfrage: WHERE Klausel mit AND Verknüpfung

Begonnen von Martin hexhex, Dezember 07, 2010, 10:53:00

⏪ vorheriges - nächstes ⏩

Martin hexhex

Liebe Community,

ich arbeite derzeit an einer Tabelle die nach Postleitzahlen aufgeschlüsselt werden soll. Nur ist es bei uns in Österreich so, dass ein Bundesland mehrere "Hauptsprengel" hat. Niederösterreich zum Beispeil hat 2*** (zB. 2334) und 3*** und ein paar von den Nachbar Bundesländern da manche Orte in Niederösterreich eben vom Nachbarbundesland mit Post versorgt werden. Dise gilt es auszusortieren.

SELECT ([Original Tabelle].[Wohnort]) AS WohnortNiederösterreich
FROM [Original Tabelle]
WHERE ((([Original Tabelle].[Wohnort]) Like "2??? *" Or ([Original Tabelle].[Wohnort]) Like "3??? *" Or ([Original Tabelle].[Wohnort]) Like "4300 *" Or ([Original Tabelle].[Wohnort]) Like "4303 *" Or ([Original Tabelle].[Wohnort]) Like "4372 *" Or ([Original Tabelle].[Wohnort]) Like "4372 *" Or ([Original Tabelle].[Wohnort]) Like "4392 *" Or ([Original Tabelle].[Wohnort]) Like "4431 *" Or ([Original Tabelle].[Wohnort]) Like "4432 *" Or ([Original Tabelle].[Wohnort]) Like "4441 *" Or ([Original Tabelle].[Wohnort]) Like "4482 *" And ([Original Tabelle].[Wohnort]) Not Like "2514 *"));


Die PLZ mit 4??? liegen ebenfalls in Niederösterreich werden aber wie schon vorher oben erwähnt von andren Bundesländern beliefert.
Jetzt meine Frage: Wieso filtert er mir nicht die 2514 raus? Von der Logik her müsste es so passen oder nicht? Nach der AND Verknüpfungen würden alle Kriterien folgen die ich speziell noch rausfiltern will.

Leider komme ich aus der Webdesign/MySQL Sparte - hab ich da was verschwitzt?

lg aus Wien ;)

Martin hexhex

SELECT [Original Tabelle].Wohnort
FROM [Original Tabelle]
WHERE ((([Original Tabelle].Wohnort) Like "2??? *" And ([Original Tabelle].Wohnort) Not Like "2500 *"));

Die Abfrage funktioniert! Aber wenn ich mehr als eine OR Bedingung habe - funktioniert die And Bedingung nicht mehr. Was mache ich flasch?

DF6GL

Hallo,

ganz so verstanden habe ich die Logik der PLZ nicht,   ;)

aber vermutlich ist die Einklammerung der OR-Teilkriterien ungenügend. D. h, alle OR's müssen innerhalb eines Klammerpaares stehen und das letzte AND außerhalb. Or hat niedrige Priorität als And und muß deshalb definiert eingeklammer werden.

Martin hexhex

ich habe das jetzt folgendermaßen ausgebessert

SELECT ([Original Tabelle].[Wohnort]) AS WohnortNiederösterreich
FROM [Original Tabelle]
WHERE (([Original Tabelle].Wohnort) Like "2??? *" Or ([Original Tabelle].Wohnort) Like "3??? *" Or ([Original Tabelle].Wohnort) Like "4300 *" Or ([Original Tabelle].Wohnort) Like "4303 *" Or ([Original Tabelle].Wohnort) Like "4372 *" Or ([Original Tabelle].Wohnort) Like "4372 *" Or ([Original Tabelle].Wohnort) Like "4392 *" Or ([Original Tabelle].Wohnort) Like "4431 *" Or ([Original Tabelle].Wohnort) Like "4432 *" Or ([Original Tabelle].Wohnort) Like "4441 *" Or ([Original Tabelle].Wohnort) Like "4482 *") And ([Original Tabelle].Wohnort) Not Like "2514 Traiskirchen";


stimmt das so?
funkioniert noch immer nicht ;) - Traiskirchen ist noch immer dabei - obwohl es nicht dabei sein sollte.
thx in advance

Martin hexhex

in den Kriterien steht das - vll bisschen übersichtler

(Wie "2??? *" Oder Wie "3??? *" Oder Wie "4300 *" Oder Wie "4303 *" Oder Wie "4372 *" Oder Wie "4372 *" Oder Wie "4392 *" Oder Wie "4431 *" Oder Wie "4432 *" Oder Wie "4441 *" Oder Wie "4482 *") Und Nicht Wie "2514 Traiskirchen"

DF6GL

Hallo,



schreib mal überall nach folgendem Syntax 
Like "2*"

und bau die Abfrage nacheinander mit mit den einzelnen Bedingungen auf...

database

Hallo Martin,

in Österreich haben wir keine PLZ mit mehr als 4 Stellen, daher ist die Schreibweise LIKE "xxxx *" unsinnig.
Fasse die ein- und auszuschließenden zu IN und NOT IN - Listen zusammen und klammere die ORs wie DF6GL vorgeschlagen hat ein.

Versuch mal das:


SELECT Wohnort AS WohnortNiederösterreich
FROM [Original Tabelle]
WHERE (Wohnort LIKE "2*" OR Wohnort LIKE "3*" Or Wohnort  In ("4300","4303","4372","4392","4431","4432","4441","4482")) AND Wohnort NOT IN("2514","2515","2516");



2514,2515,2516 soll eine beispielhafte Liste darstellen - bitte anpassen!

Grüße
Peter


Martin hexhex

 ::) ja PLZ und Wohnort stehen in einem Feld - aber dafür bin ich nicht verantwortlich....

Die Methode mit In und Not in gefällt mir viel besser - komme aber erst am Donnerstag dazu sie zu testen.

database

Hallo,

Zitatja PLZ und Wohnort stehen in einem Feld - aber dafür bin ich nicht verantwortlich
...oh Mann, du Ärmster ...   ;) ;D


SELECT Wohnort AS WohnortNiederösterreich
FROM [Original Tabelle]
WHERE (Left(Wohnort,4) LIKE "2*" OR Left(Wohnort,4) LIKE "3*" Or Left(Wohnort,4)  In ("4300","4303","4372","4392","4431","4432","4441","4482")) AND Left(Wohnort,4) NOT IN("2514","2515","2516");



...sollte den Schaden in Grenzen halten...  ;)

Martin hexhex

ja sehr cewl  ;D
der Syntax funktioniert - Ich danke vielmals!

database

Aber bitte schön ...  ;)

ZitatSyntax funktioniert
..hättest du's anders wollen?  ;D ;D ;D

Grüße
Peter