Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Bagaimana dua pernyataan pembaruan di bawah ini berbeda dalam SQL?

Dengan gabungan dalam, perbedaannya hanyalah perbedaan semantik. Kedua kueri harus menghasilkan rencana kueri yang sama persis dan hasil yang sama persis.

Namun, ketika Anda menggunakan gabungan luar, maka penting jika kondisinya ada di where klausa atau on klausa aktif.

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

Berbeda dengan

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

tidak hanya pada tingkat semantik.
Sementara kueri pertama akan mengembalikan hasil yang diharapkan dari gabungan kanan, yang kedua sebenarnya akan mengembalikan hasil yang diharapkan dari gabungan dalam.
Itu karena nilai tabel yang tepat mungkin nol jika Anda memiliki catatan di tabel kiri yang tidak cocok, dan karena membandingkan nilai apa pun dengan nol (termasuk nol lainnya) akan menghasilkan false, pada dasarnya mengubah gabungan kanan menjadi gabungan dalam.



  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 Server Membangun Kembali dan Mengatur Ulang Indeks

  2. Cara Menghapus File di SQL Server 2019

  3. Apa perbedaan kinerja utama antara tipe data varchar dan nvarchar SQL Server?

  4. Bagaimana Memetakan Kolom Input dan Output secara dinamis di SSIS?

  5. Perbarui Profil Email Database (SSMS)