Eventuali duplicati:
sql: self-joins explainedCos'è SELF JOIN e quando lo utilizzeresti?
Qual è auto join e quando lo si dovrebbe utilizzare? Non capisco se l'auto si unisce così che una spiegazione per un laico con un esempio sarebbe grandiosa.
Eventuali duplicati:
sql: self-joins explainedCos'è SELF JOIN e quando lo utilizzeresti?
Qual è auto join e quando lo si dovrebbe utilizzare? Non capisco se l'auto si unisce così che una spiegazione per un laico con un esempio sarebbe grandiosa.
Si utilizza un join automatico quando una tabella fa riferimento a dati in sé.
Ad esempio, una tabella Employee
può avere una colonna SupervisorID
che punta al dipendente che è il capo del dipendente attuale.
per interrogare i dati e ottenere informazioni sia per le persone in una riga, si potrebbe unirsi a sé in questo modo:
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
Un self join è semplicemente quando si partecipa a un tavolo con se stesso. Non esiste una parola chiave SELF JOIN
, è sufficiente scrivere un join ordinario in cui entrambe le tabelle coinvolte nel join sono la stessa tabella. Una cosa da notare è che quando ci si unisce da soli è necessario usare un alias per la tabella altrimenti il nome della tabella sarebbe ambiguo.
È utile quando si desidera correlare coppie di righe della stessa tabella, ad esempio una relazione padre-figlio. La seguente query restituisce i nomi di tutte le sottocategorie immediate della categoria "Cucina".
SELECT T2.name
FROM category T1
JOIN category T2
ON T2.parent = T1.id
WHERE T1.name = 'Kitchen'
Bello vedere questo commento .. ON T2.parent = T1.id (perché influisce sul risultato se interscambiamo 'genitore' e 'id' in esso) – himanshupareek66
Buono a dire che non esiste una parola chiave 'SELF JOIN'. Ero confuso da quella parte! – nclsvh
Dovresti utilizzare un self-join su un tavolo che "si riferisce" a se stesso - ad es. una tabella di dipendenti in cui managerid è una chiave esterna per employeeid sulla stessa tabella.
Esempio:
SELECT E.name, ME.name AS manager
FROM dbo.Employees E
LEFT JOIN dbo.Employees ME
ON ME.employeeid = E.managerid
SU ME.employeeid = E.managerid creerà risultati diversi invece di ON ME.managerid = E.employeeid – himanshupareek66
SQL self-join è semplicemente un normale join che viene utilizzato per unire una tabella con se stessa.
Esempio:
Select *
FROM Table t1, Table t2
WHERE t1.Id = t2.ID
Non sarebbe più sicuro usare 'SELECT t1. *' Per evitare duplicati di nomi di colonna nel risultato? – Matthieu
Beh, un esempio classico è dove si voleva ottenere un elenco di dipendenti e dei loro immediati manager:
select e.employee as employee, b.employee as boss
from emptable e, emptable b
where e.manager_id = b.empolyee_id
order by 1
E 'fondamentalmente utilizzato in cui v'è alcuna relazione tra le righe memorizzato nella stessa tabella.
E così via ...
Boo per sintassi non ANSI e utilizzo di ordinale nella clausola 'ORDER BY' anziché di una colonna. – RedFilter
Boo proprio di nuovo a te per aver perso il punto della risposta :-) Tendo ad usare la sintassi più semplice che funziona dal momento che il buon DBMS 'non lascerà che questo influenzi le prestazioni. – paxdiablo
migliore risposta finora ... :) –
Che assomiglia a un self join esterno a me? –
@JoeCaruso Questo perché è;) – RedFilter
Mi chiedo perché nessuno enfatizzi la parte "nella stessa fila". Non è questo il punto intero di fare un auto join? –