ошибка sqlite в остальном работающем скрипте - PullRequest
0 голосов
/ 16 сентября 2018

Почему я получаю следующее сообщение об ошибке в sqlite3

Error: near line 99: near ".": syntax error

SELECT cast.cast_id, cast.cast_name, AVG(movies.score)
FROM movies
INNER JOIN cast ON cast.movie_id = movies.id
WHERE movies.score >= 40
GROUP BY cast.cast_name
HAVING COUNT(movies.id) >= 2
ORDER BY AVG(movies.score) DESC, cast.cast_name DESC
LIMIT 10;

Строка 99 - первая строка (строка SELECT)

1 Ответ

0 голосов
/ 16 сентября 2018

cast - зарезервированное слово в SQLite. Это делает его действительно плохим выбором для имени таблицы или столбца. Список зарезервированных слов содержится в документации .

Если вы не можете изменить имя таблицы, используйте явные псевдонимы:

SELECT c.cast_id, c.cast_name, AVG(m.score)
FROM movies m INNER JOIN
     "cast" c
     ON c.movie_id = m.id
WHERE m.score >= 40
GROUP BY c.cast_id, c.cast_name
HAVING COUNT(m.id) >= 2
ORDER BY AVG(m.score) DESC, c.cast_name DESC;

Примечания:

  • Имя таблицы окружено escape-символами (обратные метки и квадратные скобки также работают).
  • В GROUP BY есть все неагрегированные столбцы в SELECT.
  • Псевдонимы - это сокращения имен таблиц.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...