Có vẻ như vấn đề là bạn không sử dụng (+)
cho language_id
của bạn kiểm tra.
Bảng của bạn được kết hợp bên ngoài, vì vậy language_id
là NULL
khi không tìm thấy bản ghi nào, nhưng sau đó bạn kiểm tra language_id = 2
, nhưng ? language_id
là NULL
.
Tôi cũng không thấy nơi bạn sử dụng kết quả từ a_tl
hoặc b_tl
, đoán đó chỉ là vấn đề của bài đăng của bạn, không phải truy vấn ban đầu của bạn?
Tuy nhiên, hãy sử dụng các phép nối rõ ràng thay vì cú pháp cũ. Khi bạn đã quen, việc đọc và hiểu sẽ dễ dàng hơn rất nhiều.
Truy vấn của bạn cũng có thể được hưởng lợi từ việc sử dụng COALESCE
(hoặc NVL
nếu bạn thích):
SELECT COALESCE( a_tl.a_disp_name, a.a_name ) AS a_name,
COALESCE( b_tl.b_disp_name, b.b_name ) AS b_name,
a.a_id,
b.b_id
FROM a
JOIN b ON ( b.b_id = a.a_id )
LEFT JOIN a_tl ON ( a_tl.a_id = a.a_id AND a_tl.language_id = 2 )
LEFT JOIN b_tl ON ( b_tl.b_id = b.b_id AND b_tl.language_id = 2 )
Hy vọng tôi đã giải quyết đúng câu hỏi của bạn, vui lòng hỏi nếu nó không hoạt động.