2013-07-26 27 views
1

我剛將數據庫從MS SQL遷移到MySQL。您日期的SQL語法中的MySql錯誤

當運行報告,我現在得到以下錯誤:

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發送:

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 

我該如何解決?

謝謝

回答

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

「Top 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 
相關問題