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