Duplicate possible:
sql: explication des auto-jointures
Qu'est-ce que l'auto-inscription et quand l'utiliseriez-vous? Je ne comprends pas ce qui est en moi, alors une explication profane avec un exemple serait formidable.
Vous utilisez une auto-jointure lorsqu'une table référence des données en elle-même.
Par exemple, une table Employee
peut avoir une colonne SupervisorID
qui pointe vers l'employé qui est le patron de l'employé actuel.
Pour interroger les données et obtenir des informations sur les deux personnes dans une ligne, vous pouvez vous joindre comme suit:
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
Eh bien, un exemple classique est celui où vous vouliez obtenir une liste des employés et de leurs gestionnaires immédiats:
select e.employee as employee, b.employee as boss
from emptable e, emptable b
where e.manager_id = b.empolyee_id
order by 1
Il est essentiellement utilisé lorsqu'il existe une relation entre les lignes stockées dans la même table.
Etc...
Une auto-jointure consiste simplement à joindre une table à elle-même. Il n'y a pas de mot clé SELF JOIN
, vous écrivez simplement une jointure ordinaire dans laquelle les deux tables impliquées dans la jointure sont identiques. Une chose à noter est que lorsque vous vous joignez vous-même, il est nécessaire d'utiliser un alias pour la table, sinon le nom de la table serait ambigu.
Cela est utile lorsque vous souhaitez corréler des paires de lignes de la même table, par exemple une relation parent-enfant. La requête suivante renvoie les noms de toutes les sous-catégories immédiates de la catégorie 'Cuisine'.
SELECT T2.name
FROM category T1
JOIN category T2
ON T2.parent = T1.id
WHERE T1.name = 'Kitchen'
La jointure automatique SQL est simplement une jointure normale qui est utilisée pour joindre une table à elle-même.
Exemple:
Select *
FROM Table t1, Table t2
WHERE t1.Id = t2.ID
Vous utiliseriez une auto-jointure sur une table qui "se réfère" à elle-même - par exemple. une table d'employés où managerid est une clé étrangère à employeeid sur la même table.
Exemple:
SELECT E.name, ME.name AS manager
FROM dbo.Employees E
LEFT JOIN dbo.Employees ME
ON ME.employeeid = E.managerid