2 Bedingungen in Abfrage

B

ByeBye 251003

Hallo,

ich habe Verständisprobleme. Bei A) erhalte ich falsche Ergebnisse, feld3 wird überhaupt nicht berücksichtigt. Bei B) funktioniert alles, wie es soll.

Es hat sicherlich mit der Prioritätenreihenfolge zu tun? OR ist "unwichtiger" als AND, bloss wie habe ich mir das bei A) vorzustellen? Warum wird AND feld3 = beding2 völlig außer acht gelassen? Und wieso gerät B) nicht durcheinander? :eek: Danke.

A)
Code:
WHERE 
  feld1 = beding1 
OR 
  feld2 = beding1 
AND 
  feld3 = beding2

B)
Code:
WHERE 
  feld1 = beding1 
AND 
  feld3 = beding2 
OR 
  feld2 = beding1 
AND 
  feld3 = beding2
 
OR und AND sollten zusammen per se nicht ohne Klammern vewrwendet werden.
SQL:
WHERE
    (feld1 = beding1 OR feld2 = beding1)
    AND feld3 = beding2 

-- ist was anderes als
WHERE
    feld1 = beding1 
    OR (feld2 = beding1 AND feld3 = beding2)

Darum rate ich dir, bei AND/OR Kombinationen immer mit Klammern arbeiten

Ich geh mal davon aus, dass A) in dem Fall so ausgewertet wird wie mein zweites Beispiel.
 
Zuletzt bearbeitet von einem Moderator:
mit Klammern in A bekomme ich das gleiche und richtige Ergebnis wie in B). Nur warum ohne Klammern nicht, wenn B) mit und ohne Klammern das richtige Ergebnis liefert? :D und beeinträchtigen Klammern nicht die Performance von MySQL?

A)
Code:
WHERE 
  (feld1 = beding1 
OR 
  feld2 = beding1) 
AND 
  feld3 = beding2
B)
Code:
WHERE 
  feld1 = beding1 
AND 
  feld3 = beding2 
OR 
  feld2 = beding1 
AND 
  feld3 = beding2
C) das gleiche Ergebnis wie B) bloss mit Klammern
Code:
WHERE 
  (feld1 = beding1 
AND 
  feld3 = beding2) 
OR 
  (feld2 = beding1 
AND 
  feld3 = beding2)
 
Ich zerbreche mir den Kopf nicht darüber, denn mit Klammern ist es klarer und sicherer.
Ansonsten musst du irgendwo im WWW herausfinden ob AND oder OR zuerst abgearbeitet wird.

Aber wie gesagt, vergiss es AND und OR ohne Klammern zu verbinden. Es lohnt sich nicht.
 

Neue Beiträge

Zurück