Страницы

Поиск по вопросам

понедельник, 24 февраля 2020 г.

Ошибка при создании SQL запроса

#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

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

Отправить комментарий