1

看来我不能为一个列加上别名并在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,...)
4

2 回答 2

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 BYHAVING子句中使用。标准 SQL 不允许您在WHERE子句中引用列别名。施加此限制是因为在WHERE执行代码时,可能尚未确定列值。

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

于 2009-06-07T09:03:38.533 回答
1

你想做什么?看起来是要让所有员工在经理表中有匹配的记录?

如果是这种情况,你不能使用

SELECT
  e.name
, e.id
FROM
  employees AS e
  inner join managers AS m ON (e.id = m.managerid)
于 2009-06-07T09:00:53.250 回答