Déplacer les jointures de la clause Where vers la clause From dans une requête Oracle

Youssef Khloufi:

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;
Thorsten Kettner:

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.bdans votre requête, il s'agit d'une simple jointure interne, car il faudrait que ce soit AND a.b (+) = c.bpour une jointure externe fonctionnelle (auquel cas vous voudriez probablement a.b = c.baussi 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.

modifier le
0

laisse moi dire quelques mots

0commentaires
connexionAprès avoir participé à la revue

Articles connexes

Clause Where dans plusieurs jointures dans la requête mysql

Optimiser la requête avec les auto-jointures et les regroupements dans la clause where

trier les résultats d'une requête comme spécifié dans la clause where

Utilisation d'une sous-requête dans la clause WHERE de gapfill dans TimescaleDB

Clause 'where' à la fin de toutes les jointures

Clause WHERE conditionnelle dans la requête Oracle SQL

Conversion de plusieurs jointures `` ancien format '' dans la clause WHERE

Réception d'une erreur de programmation "clause FROM manquante" dans la requête django

Requête dans les rails avec la clause where array

comment placer la clause WHERE conditionnelle dans une requête LINQ

La requête Linq avec une clause where dans une clause where provoque une erreur

Utilisation de la clause Where avec des dates lors de la lecture d'une requête SQL dans R

Exécutez une requête SQL à partir de PS et bouclez les critères dans la clause where

Échec de la sous-requête dans la clause FROM dans Oracle SQL

(flask) python - mysql - utilisation de la clause where dans une requête de sélection avec une variable d'URL

Python, Sqlite - Existe-t-il un moyen de neutraliser une condition dans la clause WHERE d'une requête ?

Comment filtrer une requête à l'aide d'une entrée de colonne dans la clause where

Optimiser la requête de clause where dans MySQL

Erreur de requête SQL PDO dans la clause Where

Comment utiliser une expression arithmétique dans la clause where d'une requête SQL comportant une clause Group By sans provoquer de débordement arithmétique ?

Impossible d'utiliser la clause where après l'utilisation de la clause with dans la requête Laravel

Création d'une vue mais erreur "Les vues SELECT contiennent une sous-requête dans la clause FROM"

Est-il possible de déplacer les types de fonctions hors de la signature vers la clause where?

Fonction de requête de feuille Google, contenant une chaîne dans la clause Where

Paramétrage d'une requête avec une quantité variable de conditions de la clause WHERE

Paramétrage d'une requête avec une quantité variable de conditions de la clause WHERE

requête mysql avec jointure gauche et une combinaison de AND et OR dans la clause where

Utilisation du type de données BIT pour filtrer une requête dans la clause WHERE

MySQL: utiliser une requête de filtre dans la clause Where

TOP liste

chaudétiquette

Archive