Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

SQL Server JOIN manquant les valeurs NULL

Vous pouvez être explicite sur les jointures :

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)

En pratique, je serais plus susceptible d'utiliser coalesce() dans la condition de jointure :

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

'' serait une valeur qui ne figure dans aucune des tables.

Juste un mot d'avertissement. Dans la plupart des bases de données, l'utilisation de l'une de ces constructions empêche l'utilisation d'index.