Din forklaring hænger ikke sammen med din forespørgsel. Du har nævnt
"Men jeg skal også inkludere en where-klausul, men... Jeg vil stadig have, at en række fra den venstre tabel returneres for hver post i den venstre tabel, selvom betingelsen i where-klausulen ikke er ikke mødt. "
Så jeg tror, din forespørgsel ser sådan ud
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
I ovenstående LEFT OUTER JOIN
vil blive konverteret til INNER JOIN
på grund af filtreringen af højre tabel i Where
klausul
Så som du har brugt i den første forespørgsel, bør de rigtige tabelfiltre være en del af JOIN
betingelse, som vil returnere rækker fra VENSTRE tabel, selvom der ikke er nogen matchende poster i HØJRE sidetabel.
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
Opdatering:
Du har brugt mellem operator som 10 between 11 and 9
men det skal være 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