2009-06-07 9 views
1

Es scheint, dass ich keine Spalte alias und verwenden Sie es in der inneren Auswahl in MySql.
Wie mache ich das folgende in MySql zum Beispiel?Verwendung von Spalte Alias ​​in inneren in MySql auswählen

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

MySql würde nicht erkennen M_ID alias!

Meine Tabellenstruktur:

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

Antwort

1

Was wollen Sie tun? Sieht so aus, als ob alle Mitarbeiter dort ankommen, wo ein passender Datensatz in der Manager-Tabelle vorhanden ist?

Wenn das der Fall könnten Sie nicht

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

Verwenden Sie entweder nur den ursprünglichen Spaltennamen - dies sollte funktionieren, solange die MANAGERS Tabelle keine ID Spalt hat:

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

Oder noch besser, einen Aliasnamen für die Tabellen verwenden:

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 
) 

Spaltenaliasnamen können nur in den Abschnitten ORDER BY, GROUP BY und HAVING verwendet werden. Mit Standard-SQL können Sie nicht auf einen Spaltenalias in einer WHERE-Klausel verweisen. Diese Einschränkung wird auferlegt, weil der Spaltenwert möglicherweise nicht bestimmt wird, wenn der Code WHERE ausgeführt wird.

Übrigens ist die Verwendung eines Subselect für das gegebene Problem möglicherweise nicht die beste Lösung. Auch wenn ich in diesem einfachen Fall davon ausgehen würde, dass der MySQL-Abfrageoptimierer einen einfachen Weg im Ausführungsplan finden kann.

Verwandte Themen