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
Était-ce utile?

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
scroll top