Oracle
 sql >> Base de données >  >> RDS >> Oracle

Oracle - Jointure externe gauche avec clause where

Votre explication ne correspond pas à votre requête. Vous avez mentionné

"Cependant, j'ai également besoin d'inclure une clause where mais... Je veux toujours qu'une ligne de la table de gauche soit renvoyée pour chaque enregistrement de la table de gauche même si la condition dans la clause where n'est pas pas rencontré. "

Je pense donc que votre requête ressemble à ceci

SELECT a.*, 
       b.* 
FROM   a 
       LEFT OUTER JOIN b 
                    ON a.vin = b.vin 
WHERE  Trunc(a.rep_open_date) BETWEEN Trunc(b.check_in_date) + 1 AND 
                                      Trunc(b.check_in_date) - 1 

Dans ce qui précède, le LEFT OUTER JOIN sera converti en INNER JOIN en raison de la filtration de la table de droite dans Where clause

Ainsi, comme vous l'avez utilisé dans la première requête, les bons filtres de table doivent faire partie de JOIN condition, qui renverra les lignes de la table GAUCHE même s'il n'y a pas d'enregistrements correspondants dans la table latérale DROITE.

SELECT a.*, 
       b.* 
FROM   a 
       left outer join b 
                    ON a.vin = b.vin 
                       AND Trunc(a.rep_open_date) BETWEEN 
                           Trunc(b.check_in_date) + 1 AND 
                           Trunc(b.check_in_date) - 1 

Mise à jour :

Vous avez utilisé un opérateur intermédiaire comme 10 between 11 and 9 mais il devrait être 10 between 9 and 11

SELECT a.*, 
       b.* 
FROM   a 
       left outer join b 
                    ON a.vin = b.vin 
                       AND CAST(a.rep_open_date as date) BETWEEN 
                           CAST(b.check_in_date as date) - 1 AND 
                           CAST(b.check_in_date as date) + 1