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

标签 mysql sql alias

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

SELECT NAME,ID AS M_ID FROM EMPLOYEES 
WHERE EXISTS (SELECT 1 FROM MANAGERS WHERE MANAGERID = M_ID)

MySql 无法识别 M_ID 别名!

我的表结构:

EMPLOYEES (ID,NAME) 
MANAGERS (MANAGERID,...)

最佳答案

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

SELECT NAME, ID AS M_ID 
FROM EMPLOYEES 
WHERE EXISTS (
    SELECT 1 
    FROM MANAGERS 
    WHERE MANAGERID = ID
)

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

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
)

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

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

关于mysql - 在 MySql 中的内部选择中使用列别名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/961539/

相关文章:

PHP mysql session 数组

php - 计算两个时间字段之间的差异

javascript - 页面在 ajax 中重新加载

mysql - 在已连接的表上连接表

sql - 2 列的范围查询

.htaccess - joomla htaccess 如何识别特定别名的 get 方法是什么?

ruby-on-rails - 在 Rails 3 中动态创建路由别名

MySQL 5.7 日期字段问题

php - 对超过 100 万行的表运行查询

alias - 指挥官 : how to use an alias in another alias?