Silberschatz "Database System Concepts 7th ed"中的查询问题



我在第一圈学习数据库时遇到了麻烦。

在Silberschatz的第104页,他在解释子查询时提出了这个查询。

select dept_name, avg_salary
from (select dept_name, avg (salary)
from instructor
group by dept_name)
as dept_avg (dept_name, avg_salary)
where avg_salary > 42000;

然而,这段代码在我的系统中不起作用,我后来了解到,我的系统实际上是MariaDB,而不是MySQL。我也在使用Adminer。错误如下

Error in query (1064): Syntax error near '(dept_name, avg_salary) where avg_salary > 42000' at line 5

我使用的是BunsenLabs Lithium,它不支持MySQL或phpMyAdmin,所以如果不重新安装整个系统,我就无法切换。

我已经通过两个语法验证器运行了这个查询。

这个https://www.eversql.com/sql-syntax-check-validator/表示查询很好,但优化效果不佳。

这个https://www.piliapp.com/mysql-syntax-check/给出了与我的系统相同的无效语法错误。

然而,Silberschatz基于SQLite制作了一个基于浏览器的SQL命令行,用于查询该书使用的同一数据库。我把书中写的他的查询输入命令行https://www.db-book.com/db7/university-lab-dir/sqljs.html,会抛出类似的错误

Uncaught Error: near "(": syntax error

MySQL/MariaDB版本:MySQL Ver 15.1 Distrib 10.3.23-MariaDB,用于debian linux gnu(x86_64(,使用readline 5.2

有人知道发生了什么事吗?感谢您抽出时间

找到了描述指示表和列别名的各种方法的引用,其中包括from子句中的列别名:

中级SQL-92已经要求重命名from子句中的列,但它已成为SQL:1999.4的强制性功能。4然而,它的采用率很低。

链接的站点表明mariadb根本不支持这种语法,而mysql在派生表的情况下对它的支持有限。

相关内容

  • 没有找到相关文章

最新更新