【问题标题】:SQL: ERROR 1054 (42S22) Unknown column in having clauseSQL: ERROR 1054 (42S22) 有子句中的未知列
【发布时间】:2023-03-20 15:13:01
【问题描述】:

我已经通过 stackoverflow 搜索了大约一个小时,但没有找到解决问题的方法。

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;

当我使用命令 source test.sql 时,我收到此错误消息:

ERROR 1054 (42S22) '有'中的未知列'Schueler.Snummer' 子句'

列存在,不知道哪里出了问题。

有人能解决吗?

【问题讨论】:

    标签: mysql sql mysql-error-1054


    【解决方案1】:

    你可能想要:

    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;
    

    您应该使用JOIN 语法而不是逗号语法。

    您的GROUP BY 子句应匹配SELECT 子句或使用聚合函数。

    编辑:

    我不知道为什么不使用JOIN,但如果你需要使用:

    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;
    

    【讨论】:

    • 但是我们学校有msql,不允许使用join。还有其他解决方案吗?
    • @ednhzrd 添加了替代解决方案。请告诉您的老师,逗号语法已过时,应避免使用
    • 好的,谢谢,你能解释一下为什么我的版本不工作吗?
    • @ednhzrd HAVING 用于聚合后过滤,WHERE 用于聚合前过滤。所以你不能随意混合它们。先连接表,再做聚合,再过滤聚合结果
    猜你喜欢
    • 1970-01-01
    • 2022-08-18
    • 1970-01-01
    • 1970-01-01
    • 2016-10-13
    • 2011-03-22
    • 2020-03-01
    • 2020-06-08
    • 1970-01-01
    相关资源
    最近更新 更多