Dalam sebagian besar keadaan, pembaruan SQL dilakukan menggunakan referensi langsung ke tabel tertentu (UPDATE books SET books.title = 'The Hobbit' WHERE books.id = 1 ). Namun, terkadang, mungkin terbukti bermanfaat untuk mengubah isi tabel secara tidak langsung , dengan menggunakan subset data yang diperoleh dari pernyataan kueri sekunder.
Melakukan UPDATE menggunakan SELECT sekunder pernyataan dapat dicapai dengan salah satu dari dua cara, terutama tergantung pada versi SQL Server yang Anda gunakan. Kami akan menjelajahi kedua opsi secara singkat sehingga Anda dapat menemukan yang terbaik untuk Anda.
Menggunakan INNER JOIN
Untuk semua instalasi SQL Server, metode paling dasar untuk melakukan tindakan ini adalah dengan menggunakan INNER JOIN , dimana nilai dalam kolom dari dua tabel yang berbeda dibandingkan satu sama lain.
UPDATE
books
SET
books.primary_author = authors.name
FROM
books
INNER JOIN
authors
ON
books.author_id = authors.id
WHERE
books.title = 'The Hobbit'
Dalam contoh di atas, kami UPDATING books.primary_author untuk mencocokkan authors.name untuk 'The Hobbit' dengan JOINING kedua tabel dalam kueri ke masing-masing, nilai yang cocok dari authors.id dan books.author_id .
Menggunakan MERGE untuk MEMPERBARUI dan INSERT Secara Bersamaan
Untuk SQL Server 2008 dan yang lebih baru, Microsoft memperkenalkan MERGE . yang sangat berguna operasi yang mirip dengan INNER JOIN di atas metode, tetapi MERGE mencoba melakukan keduanya UPDATE dan INSERT perintah bersama. Ini secara efektif menyinkronkan dua tabel berdasarkan kueri yang dilakukan, memperbarui, dan memasukkan catatan seperlunya agar keduanya cocok.
MERGE INTO
books
USING
authors
ON
books.author_id = authors.id
WHEN MATCHED THEN
UPDATE SET
books.primary_author = authors.name
WHEN NOT MATCHED THEN
INSERT
(books.author_id, books.primary_author)
VALUES
(authors.id, authors.name)
Kueri lengkap saat menggunakan MERGE tentunya sedikit lebih kompleks daripada INNER JOIN dasar , tetapi begitu Anda memahami cara kerja operasi, Anda akan segera memahami betapa hebatnya kemampuan ini sebenarnya.
Beberapa baris pertama cukup jelas:
MERGE INTO
books
USING
authors
ON
books.author_id = authors.id
Kami ingin MERGE INTO (UPDATE /INSERT ) books tabel dengan menggunakan authors sekunder tabel, dan kami mencocokkan keduanya berdasarkan books.author_id = authors.id yang sama perbandingan.
Dimana MERGE perintah yang berbeda ada pada logika percabangan berikut.
WHEN MATCHED THEN
UPDATE SET
books.primary_author = authors.name
Di sini kami meminta SQL untuk melakukan tindakan hanya ketika merekam MATCHED – ketika catatan yang ada ditemukan. Dalam hal ini, kami melakukan UPDATE standar seperti yang kita lakukan sebelumnya, menyetel books.primary_author bidang agar sama dengan authors.name lapangan.
Terakhir, jika kueri menemukan catatan komparatif yang cocok yang tidak ada, kami malah melakukan INSERT .
WHEN NOT MATCHED THEN
INSERT
(books.author_id, books.primary_author)
VALUES
(authors.id, authors.name)
Di sini kami hanya meminta SQL untuk INSERT rekor baru ke dalam books tabel dan meneruskan nilai untuk author_id dan primary_author bidang, diambil dari authors terkait catatan tabel.
Hasil akhir dari MERGE our kami pernyataannya adalah untuk setiap penulis di authors tabel, kami memverifikasi apakah buku yang sesuai ada di books . Jika catatan ditemukan, kami memastikan books.primary_author diatur menggunakan UPDATE , dan jika tidak ditemukan kecocokan, kami menambahkan catatan baru ke books .
Dengan itu, Anda harus memiliki pemahaman yang kuat tentang dua metode berbeda yang dapat digunakan untuk UPDATE catatan dalam SQL dengan menggunakan SELECT sekunder, komparatif pernyataan.