Search code examples
mysqlsqlmysql-error-1054

SQL: ERROR 1054 (42S22) Unknown column in having clause


I have searched through stackoverflow for about an hour without finding a solution for my problem.

select   Schueler.Vorname, Schueler.Nachname
from     Schueler, SchuelerLernt, Lehrer, Instrumente
group by Schueler.Snummer
having   Schueler.Snummer = SchuelerLernt.Snummer and
         SchuelerLernt.Lnummer = Lehrer.Lnummer and
         SchuelerLernt.Ibezeichnung = Instrumente.Ibezeichnung and
         count(Ibezeichnung) > 1;

when I use the command source test.sql, I get this error message back:

ERROR 1054 (42S22) Unknown column 'Schueler.Snummer' in 'having clause'

The column exists and I do not know what is wrong.

Is anyone able to fix it?


Solution

  • You probably want:

    select Schueler.Snummer, Schueler.Vorname, Schueler.Nachname
    from Schueler
    JOIN SchuelerLernt
      ON Schueler.Snummer = SchuelerLernt.Snummer
    JOIN Lehrer
      ON SchuelerLernt.Lnummer = Lehrer.Lnummer
    JOIN Instrumente
      ON SchuelerLernt.Ibezeichnung = Instrumente.Ibezeichnung
    group by Schueler.Snummer, Schueler.Vorname, Schueler.Nachname
    having count(Ibezeichnung) > 1;
    

    You should use JOIN syntax instead of comma syntax.

    Your GROUP BY clause should match SELECT clause or use aggregation functions.

    EDIT:

    I don't know any reason why not to use JOIN but if you need use:

    select   Schueler.Snummer, Schueler.Vorname, Schueler.Nachname
    from     Schueler, SchuelerLernt, Lehrer, Instrumente
    WHERE    Schueler.Snummer = SchuelerLernt.Snummer
      AND    SchuelerLernt.Lnummer = Lehrer.Lnummer
      AND    SchuelerLernt.Ibezeichnung = Instrumente.Ibezeichnung
    group by Schueler.Snummer, Schueler.Vorname, Schueler.Nachname
    having   count(Ibezeichnung) > 1;