Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

SQL Server JOIN brakuje wartości NULL

Możesz jasno określić sprzężenia:

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)

W praktyce chętniej używałbym coalesce() w warunku dołączenia:

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, ''))

Gdzie '' byłaby wartością, której nie ma w żadnej z tabel.

Tylko słowo ostrzeżenia. W większości baz danych użycie dowolnej z tych konstrukcji uniemożliwia korzystanie z indeksów.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak dostać 14 dni przed podanym terminem unikając świąt

  2. Przestań zmuszać SQL Server do brudnej roboty

  3. błąd konwersji varchar na float

  4. Przekazywanie parametrów dynamicznych do procedury składowanej w SQL Server 2008

  5. Zakończenie wsparcia dla SQL Server 2008. Co teraz?