Проблема с запросом в «Концепции системы баз данных 7th ed» от Silberschatz

#mysql #sqlite #mariadb

#mysql #sqlite #mariadb

Вопрос:

У меня возникли проблемы с изучением баз данных прямо на первом круге.

На странице 104 Silberschatz он представляет этот запрос при объяснении подзапросов.

 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 создал командную строку SQL на основе браузера на основе SQLite для запроса к той же базе данных, которая используется в книге. Я запустил его запрос, как это было написано в книге, в командной строкеhttps://www.db-book.com/db7/university-lab-dir/sqljs.html , который выдает аналогичную ошибку

 Uncaught Error: near "(": syntax error
  

Версия MySQL / MariaDB: mysql Версия 15.1 Дистрибутив 10.3.23-MariaDB, для debian-linux-gnu (x86_64) с использованием readline 5.2

Кто-нибудь знает, что происходит? Спасибо за ваше время

Комментарии:

1. Первое сообщение об ошибке не соответствует запросу над ним.

2. @Shadow извините за неправильный запрос, исправлено.

3. Ну, это не синтаксис mysql.

4. Этот синтаксис допустим в SQL Server: dbfiddle.uk /… и Postgresql: dbfiddle.uk /…

5. Похоже, что в этой книге не используются возможности конкретной СУБД. Так что, вероятно, вы должны найти что-то еще.

Ответ №1:

Найдена ссылка, описывающая различные методы для указания псевдонимов таблиц и столбцов, которые включают псевдонимы столбцов в предложении from:

Переименование столбцов в предложении from уже требовалось SQL-92 промежуточного уровня, но стало обязательной функцией SQL: 1999.4, тем не менее, его принятие оставляет желать лучшего.

Связанный сайт указывает, что mariadb вообще не поддерживает этот синтаксис, в то время как mysql имеет ограниченную поддержку для него в случае производных таблиц.