Tôi nghĩ những gì bạn đang yêu cầu sẽ hoạt động khi tham gia Ban đầu bảng cho cả Option_A và Option_B sử dụng LEFT JOIN
, sẽ tạo ra một cái gì đó như thế này:
Initial LEFT JOIN Option_A LEFT JOIN NULL
OR
Initial LEFT JOIN NULL LEFT JOIN Option_B
Mã mẫu:
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
Khi bạn đã làm điều này, bạn 'bỏ qua' tập hợp các NULLS. Thủ thuật bổ sung ở đây là trong dòng CHỌN, nơi bạn cần quyết định phải làm gì với các trường NULL. Nếu bảng Option_A và Option_B tương tự nhau, thì bạn có thể sử dụng COALESCE
hàm để trả về giá trị NON NULL đầu tiên (theo ví dụ).
Tùy chọn khác là bạn chỉ cần liệt kê các trường Option_A và các trường Option_B, và cho phép bất cứ điều gì đang sử dụng ResultSet
để xử lý việc xác định trường nào sẽ sử dụng.