首页 > 解决方案 > 为什么这个查询不起作用而这个查询起作用?

问题描述

在 MySQL Shell 中,两个几乎相同的查询。一个有效,一个无效。区别是一个关键词。这是为什么?

工作查询只会根据您在子查询中使用的限制数获得您选择的薪水。所以“限制4”会给你第四高的薪水。

SELECT SALARY
FROM (
      SELECT DISTINCT SALARY
      FROM TBLEMPLOYEE
      ORDER BY SALARY DESC LIMIT 3
      ) RESULT
ORDER BY SALARY LIMIT 1

这成功地给出了第三高的薪水。

如果我删除“结果”这个词,它就不再起作用了。结果有什么作用?那是别名吗?我明白了:错误 1248 (42000):每个派生表都必须有自己的别名

标签: mysqlsql

解决方案


每个派生表(AKA 子查询)确实必须有一个别名。即,必须为括号中的每个查询指定一个别名(不管是什么),该别名可用于在外部查询的其余部分中引用它。是的结果是一个别名。它可以是任何名称来代替结果,如 myalias或者是其他东西。

SELECT SALARY
FROM (
      SELECT DISTINCT SALARY
      FROM TBLEMPLOYEE
      ORDER BY SALARY DESC LIMIT 3
      ) AS RESULT
ORDER BY SALARY LIMIT 1

更多示例

SELECT ID
FROM (SELECT ID,
             msisdn 
      FROM (SELECT * FROM TT2) as myalias
     ) as anotheralias;

推荐阅读