2011-11-02 42 views
-1

我有一個查詢,我有以下錯誤返回,但是我無法找到問題,mysql的組,看不到它

您的SQL語法錯誤;檢查與您的MySQL服務器版本相對應的手冊,以便在'HAVING DATE_FORMAT(NOW(),'%​​Y') - DATE_FORMAT(candidatesDOB,'%Y') - (DATE_')在第14行使用正確的語法

這是我的查詢,

SELECT `candidates`.`candidate_id`, 
     `candidates`.`first_name`, 
     `candidates`.`surname`, 
     `candidates`.`DOB`, 
     `candidates`.`gender`, 
     `candidates`.`talent`, 
     `candidates`.`location`, 
     `candidates`.`availability`, 
     DATE_FORMAT(NOW(), '%Y') - DATE_FORMAT(`candidates`.`DOB`, '%Y') - (DATE_FORMAT(NOW(), '00-%m-%d') < DATE_FORMAT(`candidates`.`DOB`, '00-%m-%d')) 
        as `age`, 
     `candidate_assets`.`url`, 
     `candidate_assets`.`asset_size` 
FROM `candidates` 
LEFT JOIN `candidate_assets` ON `candidate_assets`.`candidates_candidate_id` = `candidates`.`candidate_id` 
WHERE `candidates`.`availability` = 'yes' 
AND candidates.talent = "presenter" 
AND candidates.gender = "male" 
HAVING DATE_FORMAT(NOW(), '%Y') - DATE_FORMAT(`candidates`.`DOB`, '%Y') - (DATE_FORMAT(NOW(), '00-%m-%d') < DATE_FORMAT(`candidates`.`DOB`, '00-%m-%d')) <= 39 
AND HAVING DATE_FORMAT(NOW(), '%Y') - DATE_FORMAT(`candidates`.`DOB`, '%Y') - (DATE_FORMAT(NOW(), '00-%m-%d') < DATE_FORMAT(`candidates`.`DOB`, '00-%m-%d')) <=29 
GROUP BY `candidates`.`candidate_id` 

是什麼問題,我不是MySQL的

的忠實用戶
+3

**請不要在這樣的單行上發佈查詢。空白是你的朋友。 – JNK

+0

@ sico87看起來好像你只是根據年份來計算年齡。你知道,我出生在五月,我的年齡在五月變化,而不僅僅是一年。考慮使用'DateDiff'。 – MPelletier

+0

@MPelletier,您可能需要滾動到右側 - 年齡計算包含一個布爾表達式,用於檢查當前日期是否比年份中的早於「DOB」。 DateDiff只能以天而不是年來返回值。 –

回答

3

三件事我馬上看到:

1 - HAVING只應在查詢中出現一次,而不是兩次。
2 - HAVING應該比後GROUP BY
3 - HAVING僅適用於聚合函數,而不是像一個日期比較。如果你想要一個日期比較,你應該使用WHERE條款。

可能還有更多,但是您的查詢非常難以在當前的「格式」中閱讀。如果您需要更多幫助,請至少將一些努力使您的問題可讀。

+0

我認爲在比較查詢中創建的字段時可以使用HAVING,即年齡爲 – Udders

+0

@ sico87 - 「HAVING」用於標準SQL中的聚合函數。更高版本的MySQL允許使用查詢中的別名字段。 – JNK

0

你只需要一次使用HAVING關鍵詞。就拿第二個客場後AND

0

檢查出您的不太難<from之前age列和having。你有更多的應該是。無效的語法。