2009-10-29 4 views
2

Développant question suivante (Multiple Select Statement) Je voudrais savoir si je peux faire ce qui suit:multiples cte dans l'instruction select unique où ctes peuvent se référer les uns aux autres

WITH 
    cte1 as (
     SELECT * from cdr.Location 
    ), 
    cte2 as (
     SELECT * from cdr.Location 
     WHERE cdr.Location.someField = cte1.SomeField 
    ) 
select * from cte1 union select * from cte2 

accent Voici donc sur la ligne suivante:

WHERE cdr.Location.someField = cte1.SomeField 

où dans cte2 je fais référence à cte1?

Répondre

8

Oui, vous pouvez faire référence précédemment déclarés CTEs dans CTEs suivantes:

WITH cte1 as (
    SELECT t.* 
    FROM cdr.Location t), 
    cte2 as (
    SELECT t.* 
    FROM cdr.Location t 
    JOIN cte1 c1 ON c1.somefield = t.someField) 
SELECT * 
    FROM cte1 
UNION 
SELECT * 
    FROM cte2 

NOTES

  1. Joining sur cte2 dans la déclaration de CTE1 ne fonctionnerait pas, car l'instruction est exécutée à partir de haut en bas.
  2. Vous référencez un CTE comme n'importe quelle autre vue en ligne (c'est-à-dire) ou table/table temporaire/etc en joignant ce dont vous avez besoin.

BTW: Essayez de donner un meilleur exemple dans le futur - c'est bon pour vous et le reste de la communauté SO qui essaie de vous aider.

+0

Merci pour votre réponse. Avez-vous suivi le lien vers la question que je développais? Je ne vois pas de problème avec l'exemple étant donné le contexte. – krul

Questions connexes