Daniela Koller: MySQL/ AND-OR SELECTs gleichzeitig

Beitrag lesen

Hi

Gibt's irgendwie ein Möglichkeit "Klammern" zu setzen? damit er weiß, daß die Raum-Argumente zusammengehören und nur eines von denen zutreffen muß, urlaubdatum aber auf jeden Fall?

Ja, die gibt es, benutze Klammern einfach

select *    <- pfui (wieso steht sicher irgendwo im Archiv)
  from namen
   left join aerzte
        on namen.name = aerzte.arzt
   left join urlaub
        on urlaub.urlaubname = namen.name
  where urlaub != current_date
    and (Raum != '1.Dienst' or Raum != '2.Dienst' or Raum != 'FOÄ');

SELECT wasduwillst FROM tabelle WHERE bedingung1 AND bedingung2 AND bedingung2 HAVING
bedingung4 OR bedingung5 OR bedingung6

Nein, having hat in diesem Zusammenhang nichts verloren. Was having macht, ist wenn du
Groupingfunktionen hast wie sum und den zugehörigen Group By nach den where clauses
noch Records rausfiltern, also auf dem Resultat. Das heisst, es wird ohne Indexzugriffe!
nochmal ein Resulttablescan gemacht. Natürlich verlangsamt das stark und es sollte
nur in Ausnahmefällen angewendet werden wenn eben beispielsweise nur Records mit
sum > x ausgegeben werden sollen, also Daten die _vor_ dem group nicht verfügbar sind.

Gruss Daniela