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

Hvordan er to opdateringssætninger nedenfor forskellige i SQL?

Med en indre sammenføjning er forskellen kun en semantisk forskel. Begge forespørgsler skal producere nøjagtig den samme forespørgselsplan og nøjagtigt det samme resultat.

Men når du bruger outer joins, er det vigtigt, om betingelsen er på where klausul eller on on-klausulen.

UPDATE li
SET li.Description = im.Description
FROM tbSupplierLineItem li
RIGHT JOIN tbIMPACArchieveNew im ON li.ItemId = im.CommomCode 
                                AND li.ProcessedDate >= CONVERT(DATE,GETDATE())

Er anderledes end

UPDATE li
SET li.Description = im.Description
FROM tbSupplierLineItem li
RIGHT JOIN tbIMPACArchieveNew im ON li.ItemId = im.CommomCode 
WHERE li.ProcessedDate >= CONVERT(DATE,GETDATE())

ikke kun på det semantiske niveau.
Mens den første forespørgsel vil returnere det forventede resultat af en højre joinforbindelse, vil den anden i virkeligheden returnere de forventede resultater fra en indre joinforbindelse.
Det skyldes, at de rigtige tabelværdier kan være null, hvis du har poster i den venstre tabel, der ikke matcher dem, og da sammenligning af en værdi med null (inklusive en anden null) vil resultere med en falsk, er det dybest set at ændre den højre join til en indre join.



  1. union alle to tabel men diff nummer af kolonne

  2. Sådan deaktiveres alle CHECK &fremmednøglebegrænsninger i en database i SQL Server (T-SQL-eksempler)

  3. JSON_VALUE() Eksempler i SQL Server (T-SQL)

  4. Valgfrie kolonner til at filtrere databaseposter