Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Как по-долу два израза за актуализиране се различават в SQL?

При вътрешно съединение разликата е само семантична разлика. И двете заявки трябва да дадат точно същия план на заявка и точно същия резултат.

Въпреки това, когато използвате външни съединения, тогава има значение дали условието е на where клауза или on клаузата on.

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

Различно е от

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

не само на семантично ниво.
Докато първата заявка ще върне очаквания резултат от дясно присъединяване, втората всъщност ще върне очакваните резултати от вътрешно присъединяване.
Това е така, защото стойностите на правилната таблица може да е null, ако имате записи в лявата таблица, които не им съответстват, и тъй като сравняването на която и да е стойност с null (включително друга null) ще доведе до false, това по същество променя дясното съединение на вътрешно съединение.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL изключение при свързване към SQL сървър

  2. Как да избегнете състояние на състезание в базата данни, когато ръчно увеличавате PK на нов ред

  3. Не може да се свърже с SQL Server:Неуспешно влизане за потребител.

  4. „СЪЗДАВАНЕ НА ИЗГЛЕД“ трябва да бъде първият израз в пакета от заявки

  5. SQL Server 2008 към SQL Server 2005