2010-11-19 15 views
0

katılmak aynı tablo Aşağıdaki sorguyu çalıştı, ama bana bir sözdizimi hatası "1064" verir: sözdizimi hatası ben gibi, bir yönetici ve aynı sorguda o yönetici için çalışmak çalışanların listesini almak istiyorum MySQL

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' 

Şimdi ben left join kullanıyorsanız bu çalışacaktır biliyorum ama bu verimli görünmüyor. Yöneticinin adı, her bir çalışan satırı için listelenir. Bunun null olmasını istiyorum. Yöneticinin adını biliyorum çünkü ilk istediğim kayıt buydu.

Hata yaptığım herhangi bir fikir var mı?

cevap

2

kullanın birlik:

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

ilk satırı, yöneticisidir, diğerleri onun çalışanları.

2

Neden sadece

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

?

Bu, belirttiğiniz beklenen sonuçları üretmelidir.

+0

Bu, öncelikle yönetici sırasını mutlaka koymaz. Yönetici kimliği sıfırsa veya yöneticiler için NULL ise, ORDER BY managerId ASC eklenebilir. – Thilo