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

SQL Server JOIN thiếu giá trị NULL

Bạn có thể nói rõ ràng về các liên kết:

SELECT Table1.Col1, Table1.Col2, Table1.Col3, Table2.Col4
FROM Table1 INNER JOIN
     Table2
      ON (Table1.Col1 = Table2.Col1 or Table1.Col1 is NULL and Table2.Col1 is NULL) AND
         (Table1.Col2 = Table2.Col2 or Table1.Col2 is NULL and Table2.Col2 is NULL)

Trong thực tế, nhiều khả năng tôi sẽ sử dụng coalesce() trong điều kiện tham gia:

SELECT Table1.Col1, Table1.Col2, Table1.Col3, Table2.Col4
FROM Table1 INNER JOIN
     Table2
     ON (coalesce(Table1.Col1, '') = coalesce(Table2.Col1, '')) AND
        (coalesce(Table1.Col2, '') = coalesce(Table2.Col2, ''))

Ở đâu '' sẽ là một giá trị không có trong một trong hai bảng.

Chỉ cần một lời cảnh cáo. Trong hầu hết các cơ sở dữ liệu, việc sử dụng bất kỳ cấu trúc nào trong số này sẽ ngăn cản việc sử dụng các chỉ mục.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Chuyển đổi ‘smalldatetime’ thành ‘time’ trong SQL Server (Ví dụ T-SQL)

  2. Làm việc với các trường thập phân trong SSIS

  3. Sử dụng lại trường bí danh trong câu lệnh SQL SELECT

  4. Nối các bảng với các hàng

  5. Cách ngăn các bản ghi trùng lặp được chèn bằng SqlBulkCopy khi không có khóa chính