2010-02-18 5 views
4

Quelle est la syntaxe correcte pour effectuer une jointure externe avec les exigences suivantes:Cascading gauche jointures externes

A gauche JOIN B externe sur A.C1 = B.c1
B gauche jointure externe C sur B.c2 = C.c2
Une jointure externe gauche D sur A.c1 = D.c1

Alors cascade A, B et C et cascade A et D.

Je sais comment écrire le A-> B-> C mais je ne sais pas comment ajouter D. J'ai besoin d'une portée ou d'une parenthèse.

Répondre

8

cela devrait fonctionner comme vous voulez:

SELECT 
    * 
    FROM A 
    left outer join B on A.c1 = B.c1 
    left outer join C on B.c2 = C.c2 
    left outer join D on A.c1 = D.c1 

le moteur DB regarde ce que vous êtes joignant, pas à l'ordre du joint. D se joint à A et n'a rien à voir avec B ou C

+1

+1: Je suis trop lent :( –

3

L'ordre dans lequel vous vous joignez n'a pas d'importance, la base de données crée un ensemble de résultats de chaque combinaison de lignes dans toutes les tables, limitée par la clause on . Par exemple, parce que 1 = 1 est toujours vrai, cela vous donne 1000 lignes:

select * 
from ten_row_table A 
left join ten_row_table B on 1=1 
left join ten_row_table C on 1=1 

Mais cela vous donne 10 lignes:

select * 
from ten_row_table A 
left join ten_row_table B on A.id = B.id 
left join ten_row_table C on A.id = C.id 

Vous pouvez effectuer des requêtes compliquées un peu plus lisibles par indentation . Nous, deuxième tiret, et d'autres dépendances par quatre espaces, comme:

from A 
left outer join B on A.c1 = B.c1 
    left outer join C on B.c2 = C.c2 
     left outer join D on C.c3 = D.c3 
    left outer join E on B.c2 = E.c2 
left outer join F on A.c1 = F.c1 
+1

plan de retrait de Nice! –

Questions connexes