似乎我无法为列添加别名并在 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 BY
、GROUP BY
和 HAVING
子句中使用。标准 SQL 不允许您在 WHERE
子句中引用列别名。施加此限制是因为执行 WHERE
代码时,列值可能尚未确定。
顺便说一句 - 对给定问题使用子选择可能不是最好的解决方案。即使在这个简单的情况下,我假设 MySQL 查询优化器可以在执行计划中找到一种简单的方法。
关于mysql - 在 MySql 中的内部选择中使用列别名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/961539/