MySQL – 在WHERE中使用别名报错

本文讨论了在SQL查询中无法在WHERE子句中直接使用别名的问题,并提供了解决方案。当试图根据别名筛选记录时,应该直接在WHERE子句中重复别名表达式,或者使用子查询来包含别名。正确做法包括在SELECT语句中使用别名,然后在WHERE子句中重复该表达式,或者将查询包裹在外部查询中,以便可以使用别名。
摘要由CSDN通过智能技术生成

文章来源https://www.lelee.top/jishuboke/MySQLzaiWHEREzhongshiyongbiemingbaocuo.html

出于某种原因,这不起作用:

select substring(rating, instr(rating,',') +1, +2) as val
from users where val = '15';

它给出了这个错误:

ERROR 1054 (42S22): Unknown column ‘val’ in ‘where clause

 那我该怎么办?

最佳答案

首先,您不能在WHERE子句上使用ALIAS.你应该使用这个专栏,

SELECT SUBSTRING(rating, INSTR(rating,',') +1, +2) AS val 
FROM   users 
WHERE  SUBSTRING(rating, INSTR(rating,',') +1, +2) = '15'

原因如下:操作顺序是SQL,

> FROM子句
> WHERE子句
> GROUP BY子句
> HAVING子句
> SELECT子句
> ORDER BY子句

ALIAS发生在WHERE子句之前的SELECT子句上.

如果你真的想使用别名,请将其包装在子查询中,

SELECT *
FROM
    (
        SELECT SUBSTRING(rating, INSTR(rating,',') +1, +2) AS val 
        FROM   users
    ) s
WHERE   val  = '15'

友情提醒:使用子查询的时候记得使用括号。

问题解决!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值