La tua spiegazione non è correlata alla tua richiesta. Hai menzionato
"Tuttavia devo anche includere una clausola where ma.... Voglio comunque che venga restituita una riga dalla tabella di sinistra per ogni record nella tabella di sinistra anche se la condizione nella clausola where è non incontrato. "
Quindi credo che la tua domanda assomigli a questa
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
In quanto sopra il LEFT OUTER JOIN
verrà convertito in INNER JOIN
a causa del filtraggio della tabella di destra in Where
clausola
Quindi, come hai utilizzato nella prima query, i filtri della tabella corretti dovrebbero far parte di JOIN
condizione, che restituirà le righe dalla tabella SINISTRA anche se non ci sono record corrispondenti nella tabella laterale DESTRA.
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
Aggiornamento :
Hai usato tra operatori come 10 between 11 and 9
ma dovrebbe essere 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