Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

SQL Server JOIN fehlende NULL-Werte

Sie können explizit über die Joins sprechen:

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)

In der Praxis würde ich eher coalesce() verwenden in der Join-Bedingung:

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

Wobei '' wäre ein Wert, der in keiner der Tabellen enthalten ist.

Nur ein Wort der Vorsicht. In den meisten Datenbanken verhindert die Verwendung eines dieser Konstrukte die Verwendung von Indizes.