#mysql
При выполнении запроса выводится ошибка 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; Помогите, пожалуйста, с решением данной проблемы.
Ответы
Ответ 1
Проблема в обращении к таблице 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Ответ 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
Комментариев нет:
Отправить комментарий