Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

hai phép nối bên ngoài bên trái không hoạt động Oracle sql

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_idNULL 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_idNULL .

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.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Viết chế độ xem oracle DB dựa trên sự khác biệt về dấu thời gian cột khác nhau

  2. Vấn đề về phiên bản truy cập dữ liệu Oracle

  3. Oracle PL / SQL:Tạo gói DML trực tuyến

  4. thu thập thông tin dba_users trong cơ sở dữ liệu Oracle khi được kết nối với tư cách người dùng

  5. Thêm một cột đại diện cho sự kết hợp của hai cột Varchar khác