Uw uitleg komt niet overeen met uw vraag. Je hebt genoemd
"Ik moet echter ook een where-clausule opnemen, maar.... Ik wil nog steeds dat een rij uit de linkertabel wordt geretourneerd voor elk record in de linkertabel, zelfs als de voorwaarde in de waar-clausule is niet ontmoet. "
Dus ik denk dat je vraag er ongeveer zo uitziet
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 het bovenstaande de LEFT OUTER JOIN
wordt omgezet in INNER JOIN
vanwege de filtratie van de rechtertabel in Where
clausule
Dus zoals u in de eerste query hebt gebruikt, moeten de juiste tabelfilters deel uitmaken van JOIN
voorwaarde, die rijen uit de LINKER-tabel retourneert, ook al zijn er geen overeenkomende records in de RECHTER-tabel.
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
Bijwerken:
Je hebt tussen operatoren gebruikt zoals 10 between 11 and 9
maar het moet 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