2009-06-07 9 views
1

Il semble que je ne puisse pas aliaser une colonne et l'utiliser dans la sélection interne de MySql.
Comment est-ce que je fais ce qui suit dans MySQL par exemple?Utilisation de l'alias de colonne dans select interne dans MySql

SELECT NAME,ID AS M_ID FROM EMPLOYEES 
WHERE EXISTS (SELECT 1 FROM MANAGERS WHERE MANAGERID = M_ID) 

MySQL ne reconnaît pas M_ID alias!

Ma structure de table:

EMPLOYEES (ID,NAME) 
MANAGERS (MANAGERID,...) 

Répondre

1

Qu'est-ce que vous essayez de faire? On dirait que c'est pour obtenir tous les employés où il y a un enregistrement correspondant dans la table des gestionnaires?

Si tel est le cas ne pouvait pas vous utiliser

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

Soit il suffit d'utiliser le nom de colonne d'origine - cela devrait fonctionner aussi longtemps que la table MANAGERS n'a pas une colonne ID:

SELECT NAME, ID AS M_ID 
FROM EMPLOYEES 
WHERE EXISTS (
    SELECT 1 
    FROM MANAGERS 
    WHERE MANAGERID = ID 
) 

Ou mieux encore, utilisez un alias pour les tables:

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 
) 

Les alias de colonne ne peuvent être utilisés que dans les clauses ORDER BY, GROUP BY et HAVING. SQL standard ne vous permet pas de faire référence à un alias de colonne dans une clause WHERE. Cette restriction est imposée parce que lorsque le code WHERE est exécuté, la valeur de la colonne peut ne pas encore être déterminée. Par ailleurs - l'utilisation d'un sous-ensemble pour le problème donné pourrait ne pas être la meilleure solution. Même si dans ce cas simple, je suppose que l'optimiseur de requêtes MySQL peut trouver un moyen simple dans le plan d'exécution.

Questions connexes