Saya melihat sejumlah variasi pada pertanyaan ini tetapi semuanya sepertinya berbicara tentang kinerja dan indeks ketika bertanya tentang membandingkan nilai nol.
Masalah saya adalah saya memiliki SELECT bersarang yang dapat mengembalikan nol yang saya bandingkan berdasarkan parameter tanggal.
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(+)
sepertinya ketika pilihan bersarang di sini mengembalikan nol maka gabungan kiri menjadi kacau.
Saya akan dengan senang hati menyertakan beberapa data palsu jika diperlukan, tetapi mungkin saya hanya melewatkan sesuatu. Yang perlu saya lakukan adalah perbandingan Fieldc hanya terjadi dalam spesifikasi tanggal tersebut.
Terima kasih atas wawasan apa pun. Terima kasih.
Informasi lebih lanjut:
Data Table_One: semua bidang adalah varchar2
Fielda | Fieldb | Fieldc|
'aVal' | 'bVal' | 'cVal'|
'dVal' | 'eVal | 'fVal'|
'dVal' | 'fVal | 'eVal'|
Tabel_Dua Data: semua bidang adalah varchar2
Fielda | Fieldb | Fieldc|
'aVal' | 'bVal' | 'cVal'|
'dVal' | 'fVal | 'gVal'|
'dVal' | 'fVal | 'cVal'|
Table_Three Data: CompareValue adalah varchar2, date_ adalah tanggal
CompareValue | date_ |
'fval' | 2012-09-10 |
Jadi jika parameternya hari ini, pilih mengembalikan 'fval' dan kita mendapatkan gabung kiri dengan benar. namun, ketika parameter tanggal sebelum '10-09-2012' maka pilihan bersarang membandingkan nol dan gabungan kiri tidak terjadi dengan benar. Ini adalah versi sederhana dari versi aslinya.
Terima kasih
(+)
untuk gabungan luar. Gunakan sintaksLEFT JOIN
yang tepat. - person a_horse_with_no_name   schedule 12.09.2012