【问题标题】:MySQL Workbench 1146 error with table alias表别名的 MySQL Workbench 1146 错误
【发布时间】:2014-06-09 14:57:13
【问题描述】:

我在工作台中有这段 MySQL 代码

1. SELECT `ΟΝΟΜΑΣΙΑ_ΠΡΟΪΟΝΤΟΣ`, `ΠΩΛΗΣΗ`
2. FROM(SELECT `ΟΝΟΜΑΣΙΑ_ΠΡΟΪΟΝΤΟΣ`, SUM(`ΠΟΣΟΤΗΤΑ`) AS `ΠΩΛΗΣΕΙΣ`
3. FROM `hospital`.`προιοντα`, `hospital`.`χρεωσεις_περιστατικων`
4. WHERE `hospital`.`προιοντα`.`ΚΩΔΙΚΟΣ_ΠΡΟΪΟΝΤΟΣ` = `hospital`.`χρεωσεις_περιστατικων`.`ΚΩΔΙΚΟΣ_ΠΡΟΪΟΝΤΟΣ` AND YEAR(`ΗΜ_ΝΙΑ_ΧΡΕΩΣΗΣ`) = 2013
5. GROUP BY `ΟΝΟΜΑΣΙΑ_ΠΡΟΪΟΝΤΟΣ`) AS `Π`
6. WHERE `ΠΩΛΗΣΗ` = (SELECT MAX(`ΠΩΛΗΣΕΙΣ`) FROM `Π`.`ΠΩΛΗΣΕΙΣ`);

问题存在于第 6 行。MySQL Workbench 无法识别表别名“Π”,因此它向我抛出了错误:

错误代码:1146。表“π.πωλησεισ”不存在。

我能做什么?

【问题讨论】:

    标签: mysql database mysql-workbench alias


    【解决方案1】:

    这是因为Π 是派生表而不是永久表,因此您不能像普通表一样在WHERE 子句中使用它。而是在外部查询中包含MAX() 计算。如下更改您的查询

      SELECT `ΟΝΟΜΑΣΙΑ_ΠΡΟΪΟΝΤΟΣ`, `ΠΩΛΗΣΗ`
       FROM
        (
        SELECT `ΟΝΟΜΑΣΙΑ_ΠΡΟΪΟΝΤΟΣ`, 
        `ΠΩΛΗΣΗ`,
        SUM(`ΠΟΣΟΤΗΤΑ`) AS `ΠΩΛΗΣΕΙΣ`
         FROM `hospital`.`προιοντα`, `hospital`.`χρεωσεις_περιστατικων`
         WHERE `hospital`.`προιοντα`.`ΚΩΔΙΚΟΣ_ΠΡΟΪΟΝΤΟΣ` = 
        `hospital`.`χρεωσεις_περιστατικων`.`ΚΩΔΙΚΟΣ_ΠΡΟΪΟΝΤΟΣ` 
         AND YEAR(`ΗΜ_ΝΙΑ_ΧΡΕΩΣΗΣ`) = 2013
         GROUP BY `ΟΝΟΜΑΣΙΑ_ΠΡΟΪΟΝΤΟΣ`
         HAVING `ΠΩΛΗΣΗ` = MAX(`ΠΩΛΗΣΕΙΣ`)
        ) AS `Π`;
    

    PS:顺便说一句,我不知道 MySQL 也可以在 Alien Language 中工作。

    【讨论】:

    • 仍然,通过这些调整,错误代码:1054。“字段列表”中的未知列“ΠΩΛΗΣΕΙΣ”,因为它似乎看不到 SUM(`ΠΟΣΟΤΗΤΑ`) AS `ΠΩΛΗΣΕΙΣ`列
    • 感谢您的回答。这里弹出一个新的错误,Error Code: 1111. Invalid use of group function
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-30
    • 1970-01-01
    • 2018-05-15
    • 1970-01-01
    相关资源
    最近更新 更多