【问题标题】:Using column alias in inner select in MySql在 MySql 的内部选择中使用列别名
【发布时间】:2009-06-07 08:53:34
【问题描述】:

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

【问题讨论】:

    标签: mysql sql alias


    【解决方案1】:

    要么只使用原始列名 - 只要 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 查询优化器可以在执行计划中找到一种简单的方法。

    【讨论】:

      【解决方案2】:

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

      如果是这样,你不能使用

      SELECT
        e.name
      , e.id
      FROM
        employees AS e
        inner join managers AS m ON (e.id = m.managerid)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-12-15
        • 1970-01-01
        相关资源
        最近更新 更多