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

SQL Server câu lệnh tham gia có điều kiện

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



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Các tính năng hàng đầu cần tìm trong Công cụ giám sát máy chủ SQL

  2. di chuyển dữ liệu từ MS SQL sang PostgreSQL?

  3. Thay đổi một cột:null thành không null

  4. Làm cách nào để sử dụng bí danh trong mệnh đề where?

  5. Cách tìm tất cả các phụ thuộc của bảng trong máy chủ sql