mysql as_mysql AS子句
我寫了一個查詢,并從出生日期開始,我計算出一個人的年齡,然后使用AS年齡創建一個年齡字段.
我的問題是,是否有可能再次匹配那個年齡段?
像這樣的東西,
SELECT `candidates`.`candidate_id`,
`candidates`.`first_name`,
`candidates`.`surname`,
`candidates`.`DOB`,
`candidates`.`gender`,
DATE_FORMAT(NOW(), '%Y') - DATE_FORMAT(`candidates`.`DOB`, '%Y') - (DATE_FORMAT(NOW(), '00-%m-%d') < DATE_FORMAT(`candidates`.`DOB`, '00-%m-%d')) AS `age`
FROM `candidates`
WHERE `age` <= 20
任何幫助將不勝感激?
—–所以我把WHERE更改為HAVING,這是我的完整查詢——
SELECT `candidates`.`candidate_id`,
`candidates`.`first_name`,
`candidates`.`surname`,
`candidates`.`DOB`,
`candidates`.`gender`,
`candidates`.`talent`,
`candidates`.`location`,
`candidates`.`availability`,
`candidate_assets`.`url`,
`candidate_assets`.`asset_size`
FROM `candidates`
LEFT JOIN `candidate_assets` ON `candidate_assets`.`candidates_candidate_id` = `C`.`candidate_id`
WHERE `C`.`availability` = 'yes'
AND C.talent = "actor"
AND C.skill = "accents"
AND C.gender = "male"
AND HAVING DATE_FORMAT(NOW(), '%Y') - DATE_FORMAT(`candidates`.`DOB`, '%Y') - (DATE_FORMAT(NOW(), '00-%m-%d') < DATE_FORMAT(`candidates`.`DOB`, '00-%m-%d')) <= 69
AND HAVING DATE_FORMAT(NOW(), '%Y') - DATE_FORMAT(`candidates`.`DOB`, '%Y') - (DATE_FORMAT(NOW(), '00-%m-%d') < DATE_FORMAT(`candidates`.`DOB`, '00-%m-%d')) <=19
AND HAVING DATE_FORMAT(NOW(), '%Y') - DATE_FORMAT(`candidates`.`DOB`, '%Y') - (DATE_FORMAT(NOW(), '00-%m-%d') < DATE_FORMAT(`candidates`.`DOB`, '00-%m-%d')) <=49
我收到以下錯誤,
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 ‘HAVING DATE_FORMAT(NOW(), ‘%Y’) – DATE_FORMAT(candidates.DOB, ‘%Y’) – (DATE_’ at line 15
對于我的生活,我不知道它是什么.
解決方法:
一種方法是將原始查詢包裝為子查詢,并將WHERE子句移動到外部查詢:
SELECT * FROM (
SELECT `candidates`.`candidate_id`, -- this is the original query
`candidates`.`first_name`,
`candidates`.`surname`,
`candidates`.`DOB`,
`candidates`.`gender`,
DATE_FORMAT(NOW(), '%Y') - DATE_FORMAT(`candidates`.`DOB`, '%Y') - (DATE_FORMAT(NOW(), '00-%m-%d') < DATE_FORMAT(`candidates`.`DOB`, '00-%m-%d')) AS `age`
FROM `candidates` ) as innertable
WHERE `age` <= 20 -- this is now part of the outer query
澄清:這可以在MySQL 5中運行
注意:這假設原始查詢有效
標簽:mysql,sql
來源: https://codeday.me/bug/20190530/1185794.html
總結
以上是生活随笔為你收集整理的mysql as_mysql AS子句的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 江淮骏铃v6老是脱档是什么原因?
- 下一篇: 通用发动机声音大是什么原因?