Penjelasan Anda tidak berkorelasi dengan kueri Anda. Anda telah menyebutkan
"Namun saya juga perlu memasukkan klausa where tapi.... Saya masih ingin baris dari tabel sebelah kiri dikembalikan untuk setiap record di tabel sebelah kiri meskipun kondisi di klausa where tidak tidak bertemu. "
Jadi saya yakin kueri Anda terlihat seperti ini
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
Di atas LEFT OUTER JOIN
akan diubah menjadi INNER JOIN
karena penyaringan tabel kanan di Where
klausa
Jadi seperti yang Anda gunakan dalam kueri pertama, filter tabel yang tepat harus menjadi bagian dari JOIN
kondisi, Yang akan mengembalikan baris dari tabel KIRI meskipun tidak ada catatan yang cocok di tabel sisi KANAN.
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
Pembaruan :
Anda telah menggunakan antar operator seperti 10 between 11 and 9
tapi seharusnya 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