sql >> Databasteknik >  >> RDS >> Sqlserver

SQL Server JOIN saknar NULL-värden

Du kan vara tydlig om anslutningarna:

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)

I praktiken skulle jag vara mer benägen att använda coalesce() i anslutningsvillkoret:

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

Där '' skulle vara ett värde som inte finns i någon av tabellerna.

Bara ett varningens ord. I de flesta databaser förhindrar användning av någon av dessa konstruktioner användningen av index.



  1. Returnera rader i slumpmässig ordning

  2. Använder Dapper med Oracle

  3. MySQL Joins:att välja vilken tabell som ska anslutas från baserat på källtabellsdata

  4. Postgres skapar POSTGIS-tilläggsfel med CentOS 6