似乎我不能为列添加别名并在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,...)
答案 0 :(得分:5)
要么只使用原始列名称 - 只要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查询优化器可以在执行计划中找到一种简单的方法。
答案 1 :(得分:1)
你想做什么?看起来是要让所有员工在经理表中有匹配的记录吗?
如果是这种情况,你就不能使用
SELECT
e.name
, e.id
FROM
employees AS e
inner join managers AS m ON (e.id = m.managerid)