Saya pikir apa yang Anda minta akan berhasil dengan bergabung dengan Awal tabel ke keduanya Option_A dan Option_B menggunakan LEFT JOIN
, yang akan menghasilkan sesuatu seperti ini:
Initial LEFT JOIN Option_A LEFT JOIN NULL
OR
Initial LEFT JOIN NULL LEFT JOIN Option_B
Contoh kode:
SELECT i.*, COALESCE(a.id, b.id) as Option_Id, COALESCE(a.name, b.name) as Option_Name
FROM Initial_Table i
LEFT JOIN Option_A_Table a ON a.initial_id = i.id AND i.special_value = 1234
LEFT JOIN Option_B_Table b ON b.initial_id = i.id AND i.special_value <> 1234
Setelah Anda melakukan ini, Anda 'mengabaikan' kumpulan NULLS. Trik tambahan di sini adalah di baris SELECT, di mana Anda perlu memutuskan apa yang harus dilakukan dengan bidang NULL. Jika tabel Option_A dan Option_B serupa, maka Anda dapat menggunakan COALESCE
fungsi untuk mengembalikan nilai NON NULL pertama (sesuai contoh).
Opsi lainnya adalah Anda hanya perlu membuat daftar bidang Option_A dan bidang Option_B, dan biarkan apa pun yang menggunakan ResultSet
untuk menangani penentuan bidang mana yang akan digunakan.