为了账号安全,请及时绑定邮箱和手机立即绑定

在MySQL查询的WHERE子句中使用列别名会产生错误

在MySQL查询的WHERE子句中使用列别名会产生错误

在MySQL查询的WHERE子句中使用列别名会产生错误我正在运行的查询如下所示,但是我得到了这个错误:#1054-‘IN/All/ANY子查询’中未知列‘已保证的_邮政编码’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'  ))我的问题是:为什么我不能在同一DB查询的WHERE子句中使用假列?
查看完整描述

3 回答

?
MMMHUHU

TA贡献1834条经验 获得超8个赞

只能在GROUPBY、ORDERBY或HAVING子句中使用列别名。

标准SQL不允许在WHERE子句中引用列别名。施加此限制是因为在执行WHERE代码时,可能尚未确定列值。

抄袭MySQL文档

正如注释中所指出的,使用已代替可能完成工作。一定要看一下这个何去何从尽管如此。


查看完整回答
反对 回复 2019-06-29
?
慕娘9325324

TA贡献1783条经验 获得超4个赞

正如维克多所指出的,问题在于化名。但是,可以避免这种情况,方法是将表达式直接放入WHERXINY子句中:

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 SUBSTRING(`locations`.`raw`,-6,4) NOT IN #this is where the fake col is being used(
 SELECT `postcode` FROM `postcodes` WHERE `region` IN
 (
  'australia'
 ))

但是,我想这是非常低效率的,因为子查询必须对外部查询的每一行执行。


查看完整回答
反对 回复 2019-06-29
  • 3 回答
  • 0 关注
  • 1284 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信