我正在运行的查询如下所示,但我得到了以下错误:

#1054-在/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子句中使用假列?

推荐答案

只能在GROUP BY、ORDER BY或HAVING子句中使用列别名.

标准SQL不允许您

抄袭自MySQL documentation

正如评论中所指出的,用have代替have可以完成这项工作.一定要阅读这个问题:WHERE vs HAVING.

Mysql相关问答推荐

如何查询打印已售罄的产品? [MYSQL]

在 MySQL 中使用三个表进行计算

如果我创建一个没有主键的表然后添加一个主键,主键是聚集索引吗?

SQL 查找边界之间的值

MariaDB 下的慢速更新、删除和插入查询

Sequel Pro 和 MySQL 连接失败

phpMyAdmin - 错误 > 格式参数不正确?

MySQL:SyntaxError:意外的标识符

不支持身份验证插件“caching_sha2_password”

MySQL 8.0 - 客户端不支持服务器请求的认证协议;考虑升级 MySQL 客户端

是否可以在 macOS 上只安装 mysqldump

MySql.Data.MySqlClient.MySqlException:“主机 localhost 不支持 SSL 连接.”

如何找到 MySQL 进程列表并杀死这些进程?

带有 OuterRef 的简单子查询

Hibernate 生成的 DDL 中的无效语法错误“type=MyISAM”

错误 1698 (28000): 拒绝用户 'root'@'localhost' 的访问

如何在sequelize中定义多列的唯一索引

使用 mysql 处理非常大的数据

错误 1067 (42000):“created_at”的默认值无效

WooCommerce:在数据库中查找产品