Mungkin Duplikat: sql: self-bergabung menjelaskan
Apa diri bergabung dan ketika anda akan menggunakannya? Saya don't memahami diri bergabung jadi orang awam penjelasan dengan contoh akan menjadi besar.
Anda menggunakan self bergabung ketika sebuah tabel referensi data dalam dirinya sendiri.
E. g., sebuah Karyawan
tabel dapat memiliki SupervisorID kolom
yang menunjuk kepada karyawan yang adalah bos dari karyawan saat ini.
Untuk query data dan mendapatkan informasi untuk kedua orang dalam satu baris, anda bisa diri bergabung seperti ini:
select e1.EmployeeID,
e1.FirstName,
e1.LastName,
e1.SupervisorID,
e2.FirstName as SupervisorFirstName,
e2.LastName as SupervisorLastName
from Employee e1
left outer join Employee e2 on e1.SupervisorID = e2.EmployeeID
Nah, salah satu contoh klasik adalah di mana anda ingin mendapatkan daftar karyawan dan manajer langsung mereka:
select e.employee as employee, b.employee as boss
from emptable e, emptable b
where e.manager_id = b.empolyee_id
order by 1
It's pada dasarnya digunakan di mana tidak ada hubungan antara baris yang disimpan dalam tabel yang sama.
Dan sebagainya...
Self join adalah hanya ketika anda bergabung dengan sebuah meja dengan dirinya sendiri. Tidak ada DIRI BERGABUNG dengan
kata kunci, anda hanya menulis biasa bergabung mana kedua tabel yang terlibat dalam bergabung adalah meja yang sama. Satu hal yang perlu diperhatikan adalah bahwa ketika anda bergabung maka perlu menggunakan alias untuk tabel jika nama tabel akan menjadi ambigu.
Hal ini berguna ketika anda ingin berhubungan pasang baris dari tabel yang sama, misalnya hubungan orangtua - anak. Berikut permintaan kembali nama-nama dari semua langsung subkategori kategori 'Dapur'.
SELECT T2.name
FROM category T1
JOIN category T2
ON T2.parent = T1.id
WHERE T1.name = 'Kitchen'
Anda'd gunakan self-join pada tabel yang "pada" untuk dirinya sendiri - misalnya sebuah tabel karyawan mana managerid adalah kunci asing untuk employeeid di meja yang sama.
Contoh:
SELECT E.name, ME.name AS manager
FROM dbo.Employees E
LEFT JOIN dbo.Employees ME
ON ME.employeeid = E.managerid