Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

SQL Server JOIN valori NULL mancanti

Puoi essere esplicito sui join:

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 pratica, sarei più propenso a usare coalesce() nella condizione di unione:

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

Dove '' sarebbe un valore non in nessuna delle tabelle.

Solo una parola di cautela. Nella maggior parte dei database, l'utilizzo di uno qualsiasi di questi costrutti impedisce l'utilizzo di indici.