我的查询有问题,这是工作查询,
SELECT res_ID,res_fName,res_mName,res_lName,rs.suffix,rms.marital_Name,rg.gender_Name,rr.religion_Name,ro.occupation_Name,ros.occuStat_Name,res_Date_Record,rc.country_citizenship,res_Bday,TIMESTAMPDIFF(YEAR,res_Bday,CURDATE()) AS age,
(case
when (TIMESTAMPDIFF(Month,res_Bday,CURDATE())<=1) then 'Maternal and Newborn'
when (TIMESTAMPDIFF(Month,res_Bday,CURDATE())<=1 and TIMESTAMPDIFF(Month,res_Bday,CURDATE())<=12) then 'Babies'
when (TIMESTAMPDIFF(Month,res_Bday,CURDATE())<=13 and TIMESTAMPDIFF(Month,res_Bday,CURDATE())<=24) then 'Toddlers'
when (TIMESTAMPDIFF(Year,res_Bday,CURDATE())<=2 and TIMESTAMPDIFF(Year,res_Bday,CURDATE())<=4) then 'Preschoolers'
when (TIMESTAMPDIFF(Year,res_Bday,CURDATE())<=5 and TIMESTAMPDIFF(Year,res_Bday,CURDATE())<=8) then 'School Age Children'
when (TIMESTAMPDIFF(Year,res_Bday,CURDATE())<=9 and TIMESTAMPDIFF(Year,res_Bday,CURDATE())<=12) then 'Tweens '
when (TIMESTAMPDIFF(Year,res_Bday,CURDATE())<=13 and TIMESTAMPDIFF(Year,res_Bday,CURDATE())<=19) then 'Teenager'
when (TIMESTAMPDIFF(Year,res_Bday,CURDATE())<=20 and TIMESTAMPDIFF(Year,res_Bday,CURDATE())<=35) then 'Young Adult'
when (TIMESTAMPDIFF(Year,res_Bday,CURDATE())<=36 and TIMESTAMPDIFF(Year,res_Bday,CURDATE())<=55) then 'Middle-Aged Adults'
when (TIMESTAMPDIFF(Year,res_Bday,CURDATE())<=56 and TIMESTAMPDIFF(Year,res_Bday,CURDATE())<=100) then 'Senior'
end) Age_Stage
FROM resident_detail rd
LEFT JOIN ref_suffixname rs ON rd.suffix_ID = rs.suffix_ID
LEFT JOIN ref_gender rg ON rd.gender_ID = rg.gender_ID
LEFT JOIN ref_marital_status rms ON rms.marital_ID = rd.marital_ID
LEFT JOIN ref_religion rr ON rr.religion_ID = rd.religion_ID
LEFT JOIN ref_occupation ro ON ro.occupation_ID = rd.occupation_ID
LEFT JOIN ref_occupation_status ros ON ros.occuStat_ID = rd.occuStat_ID
LEFT JOIN ref_country rc ON rc.country_ID = rd.country_ID
Run Code Online (Sandbox Code Playgroud)
这是结果:
我想要在 WHERE 语句中使用别名“Age_Stage”列,在上面的图像上 Age_Stage 有它们的特定值,我只想按我想要的值过滤那些 Age_Stage。但是当我在查询WHERE Age_Stage = "Young Adult"上添加
查询时,错误是结果是
“where 子句”中的未知列“Age_Stage”
Len*_*art 11
重命名发生在 WHERE 之后。您可以重复以下CASE语句:
SELECT res_ID,res_fName,res ...
(case ... end) as Age_Stage
FROM resident_detail rd
LEFT JOIN ...
WHERE (case ... end) = 'Young Adult'
Run Code Online (Sandbox Code Playgroud)
或嵌套语句:
SELECT ...
FROM (
SELECT res_ID,res_fName,res ...
(case ... end) as Age_Stage
FROM resident_detail rd
LEFT JOIN ...
) AS T
WHERE Age_Stage = 'Young Adult'
Run Code Online (Sandbox Code Playgroud)
或者您可以尝试将其添加到 HAVING 子句中。正如 ypercube 所指出的那样??在评论中,MySQL 通过在重命名之前评估 HAVING (... as Age_Stage) 来偏离标准。这是一个在以下情况下似乎非常常用于 MySQL 的技巧:
SELECT res_ID,res_fName,res ...
(case ... end) as Age_Stage
FROM resident_detail rd
LEFT JOIN ...
HAVING Age_Stage = 'Young Adult'
Run Code Online (Sandbox Code Playgroud)