Vaše vysvětlení nesouvisí s vaším dotazem. Zmínili jste
"Potřebuji však také zahrnout klauzuli where, ale.... Stále chci, aby se pro každý záznam v tabulce nalevo vrátil řádek z tabulky na levé straně, i když je podmínka v klauzuli where 'nesetkali. "
."Takže věřím, že váš dotaz vypadá nějak takto
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
Ve výše uvedeném LEFT OUTER JOIN
budou převedeny na INNER JOIN
kvůli filtraci pravé tabulky v Where
doložka
Jak jste použili v prvním dotazu, správné filtry tabulek by měly být součástí JOIN
podmínka, která vrátí řádky z LEVÉ tabulky, i když v PRAVÉ postranní tabulce nejsou žádné odpovídající záznamy.
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
Aktualizace:
Použili jste mezi operátory jako 10 between 11 and 9
ale mělo by to být 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