2010-11-19 10 views
0

Ich mag einen Manager und eine Liste der Mitarbeiter erhalten, die in der gleichen Abfrage für diesen Manager arbeitet, wie zum Beispiel:Syntaxfehler auf same-Join-Tabelle in MySQL

record 1: manager.name, manager.title 
record 2: employee.name, employee.title 
record 3: employee.name, employee.title 
record 4: employee.name, employee.title 

Die Informationen alle in der gespeichert werden gleiche Tabelle. Ich habe versucht, die folgende Abfrage, aber es gibt mir einen Syntaxfehler „1064“:

SELECT employees.id, employees.name, employees.title, employees.managerId, managers.id, managers.title, managers.name 
FROM employees 
FULL OUTER JOIN employees AS managers ON employees.id = managers.managerId 
WHERE employees.id = '1' 

Jetzt weiß ich, das wird funktionieren, wenn ich left join verwenden, aber das bedeutet nicht effizient zu sein scheint. Der Name des Managers wird für jede einzelne Mitarbeiterzeile aufgelistet. Ich möchte, dass es null ist. Ich kenne den Namen des Managers bereits, weil es der erste Datensatz war, nach dem ich gefragt habe.

Irgendwelche Ideen, wo ich falsch liege?

Antwort

2

Verwenden Sie eine Vereinigung:

SELECT id, name, title FROM employees WHERE id = 1 
UNION 
SELECT id, name, title FROM employees WHERE managerId = 1 

Die erste Reihe ist Ihr Manager, die anderen sind seine Mitarbeiter.

2

Warum nicht einfach

SELECT employees.id, employees.name, employees.title 
WHERE employees.id = [manager ID] 
OR employees.managerId = [manager ID] 

?

Das sollte zu den erwarteten Ergebnissen führen, die Sie angegeben haben.

+0

Das bedeutet jedoch nicht unbedingt, dass die Managerzeile an erster Stelle steht. Wenn die Manager-ID für Manager null oder NULL ist, funktioniert das Anhängen von ORDER BY managerId ASC möglicherweise. – Thilo