Je suis confronté à un problème de jointure dans la base de données SQL Server 2005. J'ai la structure des tableaux suivants:SQL Server: comment faire une requête avec une jointure externe gauche + jointure interne dépendante?
TableA --LEFT JOIN--> TableB --INNER JOIN-->TableC
Donc, si j'écris une requête comme ceci:
SELECT TableA.* FROM TableA
LEFT OUTER JOIN TableB ON TableA.keyOfB = TableB.key
INNER JOIN TableC ON TableB.keyOfC = TableC.key
where TableA.key = aValue
il lu 0 enregistrement s'il n'y a aucun enregistrement TableB
associé à TableA
enregistrement. Mais TableB
est dans la jointure externe, donc ce n'est pas ce que j'attendais. En d'autres termes, le INNER JOIN n'aurait pas dû être considéré, car il n'y a aucun enregistrement TableB
! Qu'est-ce qui me manque?
Pouvez-vous modifier le code de Pier Luigi avec votre suggestion parce que je ne suis pas sûr de ce que vous voulez dire ici? – David
+1 - Je n'ai pas vraiment compris ce que l'OP avait besoin au début mais je pense que cela va à l'essentiel. Une fois groupé comme vous le suggérez, seul l'Enregistrement A est 'nécessaire', les champs de B et C suivront s'ils BATTENT. –
Ce n'est pas aussi simple que d'ajouter quelques parenthèses, il faut un peu de réorganisation et probablement un nouveau SELECT, sauf s'il y a quelque chose d'intelligent im manquant (toujours très possible = P) –