J'ai la requête Oracle suivante et je souhaite déplacer les jointures de la clause Where vers la clause From
select
*
from
A, B, C
where
A.a (+)= B.a
AND A.b (+) = B.b
AND A.b = C.b;
J'ai donc proposé la requête suivante
select
*
from
C,
B left join A on (B.a = A.a and B.b = A.b and C.b = A.b);
Je veux savoir si les deux requêtes sont sémantiquement identiques et si les deux produiront les mêmes résultats
*** Edit: tentative 2
select
*
from
B left join A on (B.a = A.a and B.b = A.b)
inner join C on C.b = A.b;
Dans l'ancienne syntaxe de jointure Oracle, le (+)
doit être appliqué à toutes les colonnes de la table jointe externe. Dans votre requête d'origine, c'est donc la table A qui est jointe à la table B, car
FROM a, b
WHERE a.a (+) = b.a AND a.b (+) = b.b
est
FROM b
LEFT join a ON a.a = b.a AND a.b = b.b
Mais AND a.b = c.b
dans votre requête, il s'agit d'une simple jointure interne, car il faudrait que ce soit AND a.b (+) = c.b
pour une jointure externe fonctionnelle (auquel cas vous voudriez probablement a.b = c.b
aussi ne pas croiser les deux tables).
Votre requête se résume donc à:
select *
from a
inner join b on b.a = a.a and b.b = a.b
inner join c on c.b = a.b;
Cet article est collecté sur Internet, veuillez indiquer la source lors de la réimpression.
En cas d'infraction, veuillez [email protected] Supprimer.
laisse moi dire quelques mots