簡體   English   中英

在MySql的內部選擇中使用列別名

[英]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 BYGROUP BYHAVING子句中使用。 標准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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM