sql >> Databasteknik >  >> RDS >> Sqlserver

Hur skiljer sig två uppdateringssatser nedan i SQL?

Med en inre sammanfogning är skillnaden bara en semantisk skillnad. Båda frågorna bör ge exakt samma frågeplan och exakt samma resultat.

Men när du använder yttre kopplingar spelar det roll om villkoret är 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())

Är annorlunda än

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())

inte bara på den semantiska nivån.
Medan den första frågan kommer att returnera det förväntade resultatet av en högerkoppling, kommer den andra att returnera resultatet som förväntas från en inre koppling.
Det beror på att rätt tabellvärden kan vara null om du har poster i den vänstra tabellen som inte matchar dem, och eftersom att jämföra ett värde med null (inklusive en annan null) kommer att resultera med en falsk, är det i princip att ändra den högra joinen till en inre join.



  1. Välj de senaste posterna från tabellen med hjälp av grupp efter

  2. Det gick inte att ladda autentiseringsplugin 'caching_sha2_password' i Netbean

  3. Skriv ut den faktiska frågan som MySQLdb körs?

  4. Lägg till saknad månad i resultat med värden från föregående månad