[英]Using column alias in inner select in MySql
看来我不能为一列加上别名并在MySql的内部select中使用它。
例如,如何在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查询优化器可以在执行计划中找到一种简单的方法。
你想做什么? 看起来是要使所有雇员的经理表中都有匹配的记录?
如果是这样的话,您不能使用
SELECT
e.name
, e.id
FROM
employees AS e
inner join managers AS m ON (e.id = m.managerid)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.