आपका स्पष्टीकरण आपकी क्वेरी से संबंधित नहीं है। आपने
. का उल्लेख किया है"हालाँकि मुझे जहाँ क्लॉज़ भी शामिल करना है लेकिन.... मैं अब भी बाएँ हाथ की तालिका से एक पंक्ति को बाएँ हाथ की तालिका में प्रत्येक रिकॉर्ड के लिए लौटाना चाहता हूँ, भले ही वह स्थिति जहाँ क्लॉज़ है नहीं मिले। "
तो मेरा मानना है कि आपकी क्वेरी कुछ इस तरह दिखती है
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
उपरोक्त में LEFT OUTER JOIN
INNER JOIN
. में बदल दिया जाएगा Where
. में दायां टेबल फिल्टर होने के कारण खंड
इसलिए जैसा कि आपने पहली क्वेरी में इस्तेमाल किया है, सही टेबल फ़िल्टर JOIN
. का हिस्सा होना चाहिए कंडीशन, जो लेफ्ट टेबल से पंक्तियों को वापस कर देगी, भले ही राइट साइड टेबल में कोई मेल खाने वाला रिकॉर्ड न हो।
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
अपडेट करें:
आपने 10 between 11 and 9
. जैसे ऑपरेटर के बीच उपयोग किया है लेकिन यह 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