# Probleme mit AND und OR



## Wang (27. Mrz 2012)

Moin',

ich stehe grad mit einer SQL-Abfrage vollkommen auf dem Schlauch. Gegeben ist diese Tabelle:







Darüber befindet sich diese spezielle ComboBox:






Der User soll nun die Tabelle weiter einschränken, indem er in dieser ComboBox beliebige "occupations" auswählt, die in der Tabelle zu sehen sind und dann auf "Update Table" klickt.
Auf diese Weise wird ein SQL-Befehl gebaut und die Datenbank abgefragt, woraufhin dann die Tabelle neu gezeichnet wird.

Mein Problem:
Angenommen man interessiert sich für die Berufe "administrator" und "programmer", dann haut soetwas wie 
	
	
	
	





```
"SELECT * FROM users WHERE age >= 61 AND age <= 70 AND gender = 'M' AND occupation = 'administrator' OR occupation = 'programmer';"
```
 nicht hin, weil mir dann sämtliche geschlechts- und altersübergreifenden Einträge (die Datenbank enthält mehr User als auf dem Bild zu sehen sind) als Ergebnis zurückkommen, die "administrator" oder "programmer" als Wert besitzen. :autsch:

Ich habe keinen blassen Schimmer, warum das Alter und Geschlecht plötzlich außer Acht gelassen werden, obwohl sie mit dem logischen Und verknüpft sind.

Hat jemand eine Idee?

Vielen Dank!

Gruß
Wang


----------



## Andgalf (27. Mrz 2012)

Klammern sind hier das Stichwort

Versuchs mal so ... Achtung ungetestet

```
"SELECT * FROM users WHERE (age >= 61 AND age <= 70 AND gender = 'M') AND (occupation = 'administrator' OR occupation = 'programmer');"
```


----------



## maki (27. Mrz 2012)

Versuchs mal mit Klammern.


----------



## nillehammer (27. Mrz 2012)

Ich glaube, es liegt an dem OR ohne Klammerung. Probiere folgendes:

```
SELECT * FROM users WHERE age >= 61 AND age <= 70 AND gender = 'M' AND (occupation = 'administrator' OR occupation = 'programmer');
```
*Oder benutze statt dessen die IN-Bedingung. Das ist für Deinen Anwendungsfall vielleicht sogar besser geeignet.*

```
SELECT * FROM users WHERE age >= 61 AND age <= 70 AND gender = 'M' AND occupation IN ('administrator', 'programmer') );
```


----------



## tfa (27. Mrz 2012)

AND bindet stärker als OR, du musst hier Klammern setzen, also [c].. AND a AND b AND (c OR d)[/c].


----------



## Wang (27. Mrz 2012)

Danke Leute, es waren tatsächlich die Klammern. :toll:

Ich bin von diesem "MS Access" (von der Uni leider so vorgegeben), schon so voreingenommen, dass ich auf diese einfache Lösung gar nicht mehr gekommen bin. :lol:


----------

