Din förklaring stämmer inte med din fråga. Du har nämnt
"Men jag måste också inkludera en where-sats men... Jag vill fortfarande att en rad från den vänstra tabellen ska returneras för varje post i den vänstra tabellen även om villkoret i where-satsen inte är inte träffat. "
Så jag tror att din fråga ser ut ungefär så här
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 ovanstående LEFT OUTER JOIN
kommer att konverteras till INNER JOIN
på grund av filtreringen av höger tabell i Where
klausul
Så som du har använt i den första frågan bör de rätta tabellfiltren vara en del av JOIN
condition, Vilket kommer att returnera rader från VÄNSTER tabell även om det inte finns några matchande poster i RIGHT sidotabell.
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
Uppdatering:
Du har använt en operator som 10 between 11 and 9
men det ska vara 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