У меня есть таблица классов, которая выглядит следующим образом:
Classes(classid, dept_code, course#, sect#, year, semester, limit, class_size, room, TA_B#)
Вопрос: Найдите classid, dept_code и номер курса каждого класса бакалавриата (т. Е. Курс № <500), который был предложен в Spring 2017 г. Для каждого такого класса также укажите количество доступных мест (рассчитывается по limit - class_size). под заголовком «seat_available».
Я попробовал такой простой подход:
select classes.classid, classes.dept_code, classes.course#,
classes.limit-classes.class_size as'seats_available'
from classes
where limit>class_size and year='2017' and semester='Spring'and course# < 500;
0 Но я получаю сообщение об ошибке:
ERROR at line 1:
ORA-00923: FROM keyword not found where expected
Что мне не хватает? Эта ошибка исчезнет, если я удалю этот код строки: classes.limit-classes.class_size as'seats_available'
Я использую базу данных Oracle
В стандарте SQL идентификаторы нужно заключать в двойные кавычки ("
). И база данных Oracle там соответствует стандарту.
Одиночные кавычки ('
) предназначены для символьных констант, например. как и в semester='Spring'
, они могут использоваться нет для идентификаторов, таких как имена столбцов, имена таблиц или псевдонимы столбцов.
Итак, вам нужно использовать:
classes.limit-classes.class_size as "seats_available"
На самом деле вам не нужны двойные кавычки, так как ваш идентификатор не содержит недопустимых символов, поэтому
classes.limit-classes.class_size as seats_available
будет работать так же хорошо
Не связано, но: числа должны быть заключены в одинарные кавычки нет. 2017
- числовая константа, '2017'
- строковая константа. Поэтому вам следует использовать where year = 2017
вместо
@Vagabond: как я уже сказал: идентификатор нельзя заключать в одинарные кавычки в SQL. Вам нужно либо использовать кавычки двойной ("
), либо вообще не использовать кавычки для идентификатора
@a_horse_with_no_name. . . К сожалению, многие базы данных поддерживают одинарные кавычки для определения псевдонимов столбцов (даже некоторые базы данных, принадлежащие Oracle). Я просто добавил к ответу небольшое уточнение.
@GordonLinoff: утверждение, что "SQL" требует двойных кавычек для идентификаторов, все еще верно. Это то, что требует стандарт SQL. Насколько мне известно, только MySQL и SQL Server нарушают это требование. Какие еще «множество баз данных» поддерживают это?
Я использовал одинарные кавычки. Тогда почему я получаю сообщение об ошибке?