OoBozzoO wrote:select * from rma where rmastatus = 0 or rmastatus = 1 or rmastatus = 2 or rmastatus = 3 and kaustausch = 1
...
was muss ich anders machen?
Du mußt selbstverständlich die Bedingungen in Klammern setzen - die werden
nicht von links nach rechts abgearbeitet (das wäre nur der Fall bei "gleich starken" Bedingungen), sondern ein "and" bindet stärker als ein "or". Das heißt im Klartext, ohne Klammern hat Dein Select die gleiche Bedeutung wie dieser geklammerte Select:
- Code: Select all
select * from rma where (rmastatus = 0 or rmastatus = 1 or rmastatus = 2) or (rmastatus = 3 and kaustausch = 1)
Das ist sicher nicht das, was Du willst: denn nur bei rmastatus = 3 wird die Forderung kaustausch = 1 auch gestellt. Wenn der rmastatus aber 0 oder 1 oder 2 ist, dann spielt der Wert von kaustausch keine Rolle mehr, die Bedingung ist bereits erfüllt. Und deswegen werden Dir dann auch Zeilen angezeigt, die nicht kaustausch = 1 haben.
Richtig sieht der Select so aus:
- Code: Select all
select * from rma where (rmastatus = 0 or rmastatus = 1 or rmastatus = 2 or rmastatus = 3) and kaustausch = 1
Das ganze nennt sich "Aussagenlogik" (oder vornehmer "Boolsche Algebra") und ist einfachste Schulmathematik, 10. Klasse oder darunter....