Auto-jointure avec imbriqué requête T-SQL
Question
Est-il possible de rejoindre une instruction select imbriqué avec lui-même (sans l'écrire deux fois et en l'exécutant deux fois)
Quelque chose comme ce serait l'idéal
SELECT P.Child, P.Parent, Q.Parent AS GrandParent
FROM (SELECT Child, Parent FROM something-complex) AS P
LEFT JOIN P AS Q ON Q.Child = P.Parent
La solution
50% est possible.Vous pouvez utiliser une expression de table commune pour éviter d'écrire deux fois mais il sera toujours exécuter deux fois.
;WITH p
AS (SELECT child,
parent
FROM something-complex)
SELECT p.child,
p.parent,
q.parent AS grandparent
FROM p
LEFT JOIN p AS q
ON q.child = p.parent
Si la requête est onéreux vous auriez besoin de la concrétiser dans une variable de table ou #temp
table pour éviter l'auto-jointure causant deux invocations de la requête sous-jacente.
Autres conseils
Vous pouvez utiliser une table commune d'expression:
WITH P AS (SELECT Child, Parent FROM something-complex)
SELECT P.Child, P.Parent, Q.Parent as GrandParent
LEFT JOIN P AS Q ON Q.Child = P.Parent
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow