При выполнении запроса выводится ошибка
1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'group, discipline, exam, student WHERE exam.stud_id = student.stud_id AND ' at line 2
Вот сам запрос:
SELECT group.index_group, discipline.name_disc, COUNT(*), SUM(value)
FROM group, discipline, exam, student
WHERE exam.stud_id = student.stud_id AND
exam.disc_id = discipline.disc_id AND
exam.value IS NOT NULL AND
exam.value > 2
GROUP BY group.index_group, discipline.name_disc
Вот используемые таблицы:
CREATE TABLE IF NOT EXISTS `discipline` (
`disc_id` int(11) NOT NULL AUTO_INCREMENT,
`name_disc` varchar(100) DEFAULT NULL,
`type_of_classes` varchar(100) DEFAULT NULL,
`id_prepod` int(11) NOT NULL,
`index_group` int(11) NOT NULL,
PRIMARY KEY (`disc_id`),
KEY `index_group` (`index_group`),
KEY `id_prepod` (`id_prepod`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
СREATE TABLE IF NOT EXISTS `exam` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`disc_id` int(11) NOT NULL,
`stud_id` int(11) NOT NULL,
`value` int(11) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `disc_id` (`disc_id`),
KEY `stud_id` (`stud_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE IF NOT EXISTS `group` (
`index_group` int(11) NOT NULL AUTO_INCREMENT,
`course` int(11) NOT NULL,
`id_specialization` int(11) NOT NULL,
PRIMARY KEY (`index_group`),
KEY `id_specialization` (`id_specialization`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE IF NOT EXISTS `student` (
`stud_id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) NOT NULL,
`index_group` int(11) NOT NULL,
PRIMARY KEY (`stud_id`),
KEY `index_group` (`index_group`),
KEY `index_group_2` (`index_group`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
Помогите, пожалуйста, с решением данной проблемы.
Ответ
Проблема в обращении к таблице group. В MySQL слово group - зарезервированное слово (является частью синтаксиса select ... group by), и если надо его использовать в качестве имени для базы/таблицы/столбца - обрамляйте его кавычками:
select `group` ... from `group`
То же касается зарезервированных слов select, insert, delete, update (они обозначают действия, которые можно выполнить со строками), text, date, time (они обозначают типы данных) и многих других
Общей практикой и хорошим тоном будет всегда обрамлять названия базы/таблицы/столбца в запросах кавычками, независимо от присутствия ключевых слов в этих названиях:
select `fldname` from `bdname`.`tblname` where `fld2name` = '123' order by `fld3name` limit 5
Комментариев нет:
Отправить комментарий