ฉันเห็นรูปแบบต่างๆ มากมายในคำถามนี้ แต่ดูเหมือนว่าจะพูดถึงประสิทธิภาพและดัชนีเมื่อถามเกี่ยวกับการเปรียบเทียบค่า Null
ปัญหาของฉันคือฉันมี SELECT ที่ซ้อนกันซึ่งสามารถส่งคืนค่าว่างที่ฉันกำลังเปรียบเทียบโดยอิงตามพารามิเตอร์วันที่
SELECT a.*
FROM Table_One a,
Table_Two b
WHERE a.Fieldc IN (SELECT CompareValue from Table_Three cv WHERE inDate between cv.Date_ and SYSDATE)
AND a.Fielda = b.Fieldb(+)
ดูเหมือนว่าเมื่อการเลือกแบบซ้อนที่นี่ส่งคืนค่าว่าง การรวมด้านซ้ายจะเลอะเทอะ
ฉันยินดีที่จะใส่ข้อมูลปลอมหากจำเป็น แต่บางทีฉันอาจพลาดอะไรบางอย่างไป สิ่งที่ฉันต้องเกิดขึ้นคือการเปรียบเทียบ Fieldc เกิดขึ้นภายในข้อกำหนดวันที่นั้นเท่านั้น
ขอบคุณสำหรับข้อมูลเชิงลึก ขอบคุณ.
ข้อมูลเพิ่มเติม:
Table_One Data: ทุกฟิลด์เป็น varchar2
Fielda | Fieldb | Fieldc|
'aVal' | 'bVal' | 'cVal'|
'dVal' | 'eVal | 'fVal'|
'dVal' | 'fVal | 'eVal'|
Table_Two Data: ทุกฟิลด์เป็น varchar2
Fielda | Fieldb | Fieldc|
'aVal' | 'bVal' | 'cVal'|
'dVal' | 'fVal | 'gVal'|
'dVal' | 'fVal | 'cVal'|
Table_Three Data: CompareValue คือ varchar2, date_ คือวันที่
CompareValue | date_ |
'fval' | 2012-09-10 |
ดังนั้นหากพารามิเตอร์เป็นวันนี้ การเลือกจะส่งกลับ 'fval' และเราจะเข้าร่วมอย่างถูกต้อง อย่างไรก็ตาม เมื่อพารามิเตอร์วันที่อยู่ก่อน '2012-09-10' การเลือกแบบซ้อนจะเปรียบเทียบค่าว่างและการรวมด้านซ้ายจะไม่เกิดขึ้นอย่างถูกต้อง นี่เป็นเวอร์ชันที่เรียบง่ายของต้นฉบับเล็กน้อย
ขอบคุณ
(+)
สำหรับการรวมภายนอก ใช้ไวยากรณ์LEFT JOIN
ที่เหมาะสม - person a_horse_with_no_name   schedule 12.09.2012