2013-07-26 3 views
1

Я только что перенесла свою базу данных с MS SQL на MySQL.Ошибка MySql в синтаксисе SQL для даты

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

Application Execution Exception 
Error Type: database : 0 
Error Messages: 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 '2 YEAR(res_created) AS responseYear FROM Responses INNER JOIN ' at line 1 

SQL Sent:

SELECT DISTINCT TOP #arguments.yearsToReturn# YEAR(res_created) AS responseYear 
     FROM 
      Responses 
     INNER JOIN 
      Questions ON Responses.question_id = Questions.question_id 
     INNER JOIN 
      Lookup_Survey_Questions ON Questions.question_id = Lookup_Survey_Questions.question_id 
     INNER JOIN 
      Survey ON Lookup_Survey_Questions.survey_id = Survey.survey_id 
     INNER JOIN 
      School ON Survey.sch_id = School.sch_id 
     INNER JOIN 
      Authority ON School.auth_id = Authority.auth_id 
     WHERE 
      Authority.auth_id = #arguments.authorityID# 
     AND 
      Questions.question_id = #arguments.questionID# 
     AND 
      Responses.survey_id IN (SELECT Survey.survey_id FROM Survey where Survey.sch_id in (SELECT School.sch_id FROM School where auth_id=#arguments.authorityID#)) 
     ORDER BY 
      responseYear ASC 

Как я могу решить?

Thanks

ответ

1

Я думаю, что это может быть упрощена следующим образом ...

SELECT DISTINCT YEAR(res_created) responseYear 
    FROM Responses r 
    JOIN Questions q 
    ON q.question_id = r.question_id 
    JOIN Lookup_Survey_Questions lsq 
    ON lsq.question_id = q.question_id 
    JOIN Survey u 
    ON u.survey_id = lsq.survey_id 
    JOIN School c 
    ON c.sch_id = u.sch_id 
    JOIN Authority a 
    ON a.auth_id = c.auth_id 
WHERE a.auth_id = #arguments.authorityID# 
    AND q.question_id = #arguments.questionID# 
    AND c.auth_id=#arguments.authorityID# 
ORDER 
    BY responseYear ASC 
LIMIT 2; 
1

«Топ 2» не является синтаксисом MySQL. Чтобы выбрать первые два результата, добавьте предел 2 в конец запроса:

... 
    ORDER BY 
     responseYear ASC LIMIT 2 
1

Вы используете два предложения в одном месте. Вы используете DISTINCT и TOP, поэтому есть ошибка.

Используйте этот запрос:

SELECT DISTINCT YEAR(res_created) AS responseYear 
     FROM Responses 
      INNER JOIN Questions ON Responses.question_id = Questions.question_id 
      INNER JOIN Lookup_Survey_Questions ON Questions.question_id = Lookup_Survey_Questions.question_id 
      INNER JOIN Survey ON Lookup_Survey_Questions.survey_id = Survey.survey_id 
      INNER JOIN School ON Survey.sch_id = School.sch_id INNER JOIN Authority ON School.auth_id = Authority.auth_id 
      WHERE Authority.auth_id = 5 AND Questions.question_id = 20 AND Responses.survey_id IN (
      SELECT Survey.survey_id FROM Survey where Survey.sch_id in (SELECT School.sch_id FROM School where auth_id=5)) 
      ORDER BY responseYear ASC 
      LIMIT 0,2; //use the limit 
Смежные вопросы