我正在运行的查询如下,但是出现此错误:
#1054-‘IN / ALL / ANY子查询’中的未知列’guaranteed_postcode’
SELECT `users`.`first_name`, `users`.`last_name`, `users`.`email`, SUBSTRING(`locations`.`raw`,-6,4) AS `guaranteed_postcode` FROM `users` LEFT OUTER JOIN `locations` ON `users`.`id` = `locations`.`user_id` WHERE `guaranteed_postcode` NOT IN #this is where the fake col is being used ( SELECT `postcode` FROM `postcodes` WHERE `region` IN ( 'australia' ) )
我的问题是:为什么我不能在同一数据库查询的where子句中使用伪列?
您只能在GROUP BY,ORDER BY或HAVING子句中使用列别名。
标准SQL不允许您在WHERE子句中引用列别名。之所以施加此限制,是因为执行WHERE代码时,可能尚未确定列值。
从MySQL文档复制
正如评论中指出的那样,改用HAVING可能会完成工作。请务必在此给读取其中Vs HAVING虽然。