在MySql中使用内部选择中的列别名

1 mysql sql alias

似乎我不能为列添加别名并在MySql的内部选择中使用它.
例如,如何在MySql中执行以下操作?

SELECT NAME,ID AS M_ID FROM EMPLOYEES 
WHERE EXISTS (SELECT 1 FROM MANAGERS WHERE MANAGERID = M_ID)
Run Code Online (Sandbox Code Playgroud)

MySql无法识别M_ID别名!

我的表结构:

EMPLOYEES (ID,NAME) 
MANAGERS (MANAGERID,...)
Run Code Online (Sandbox Code Playgroud)

Ste*_*rig 5

要么只使用原始列名称 - 只要MANAGERS表没有列,这应该有效ID:

SELECT NAME, ID AS M_ID 
FROM EMPLOYEES 
WHERE EXISTS (
    SELECT 1 
    FROM MANAGERS 
    WHERE MANAGERID = ID
)
Run Code Online (Sandbox Code Playgroud)

或者更好的是,使用表的别名:

SELECT e.NAME, e.ID AS M_ID 
FROM EMPLOYEES AS e
WHERE EXISTS (
    SELECT 1 
    FROM MANAGERS AS m
    WHERE m.MANAGERID = e.ID
)
Run Code Online (Sandbox Code Playgroud)

列的别名只能在被使用ORDER BY,GROUP BY并且HAVING条款.标准SQL不允许您引用WHERE子句中的列别名.施加此限制是因为当WHERE执行代码时,可能尚未确定列值.

顺便说一下 - 对给定问题使用子选择可能不是最好的解决方案.即使在这个简单的情况下,我也假设MySQL查询优化器可以在执行计划中找到一种简单的方法.