dedlfix: [MySQL 4.0] Austauschbarkeit von WHERE- und HAVING-Bedingungen

Beitrag lesen

echo $begrüßung;

select marken.Markenname, orgeln.Modell from orgeln_klaviaturen inner join orgeln on orgeln.Nr = Orgel_Nr inner join marken on orgeln.Marke = marken.Nr inner join klaviaturen on klaviaturen.Klaviatur_Nr = orgeln_klaviaturen.Klaviatur_Nr where Position>0 and Anzahl_Tasten not in (37, 44, 49, 61) group by Modell order by Markenname, Modell;


> Wenn ich z. B. HAVING COUNT(\*) AND Anzahl\_Tasten NOT IN (37, 44, 49, 61) schreibe, bekomme ich eine Fehlermeldung  
> "Unknown column 'Anzahl\_Tasten' in 'having clause'" - wieso?  
  
WHERE schränkt die aus den Tabellen zu holenden Datensätze ein. Ein HAVING wirkt auf die bereits ermittelten Datensätze und kann sich dabei auch nur noch auf die zu dem Zeitpunkt vorhandenen Daten beziehen. Es kann nicht rückwirkend Bedingungen hinzufügen. Wenn die Einschränkung auf überhaupt zu betrachtenden Datensätze gelegt werden soll, schreib sie ins WHERE, oder falls sie essentieller Bestandteil einer Verknüpfungsbedingung ist ins JOIN. Wenn die Einschränkung erst nach der Gruppierung und der Berechung der Spalten gemäß der SELECT-Klausel erfolgen kann, gehört sie ins HAVING.  
  
  
echo "$verabschiedung $name";