Rumah >pangkalan data >tutorial mysql >Bagaimanakah Saya Boleh Mengemas kini Nilai Lajur dalam Satu Jadual Berdasarkan Nilai daripada Jadual Lain?
Mengemas kini Lajur Jadual Menggunakan Data daripada Jadual Lain
Panduan ini menunjukkan cara mengemas kini nilai lajur dalam satu jadual pangkalan data menggunakan data daripada yang lain, dengan mengandaikan kedua-dua jadual berkongsi medan yang sama untuk rekod yang sepadan. Mari kita pertimbangkan dua jadual, tableA
dan tableB
, dengan struktur yang serupa:
id | name | value |
---|---|---|
1 | Joe | 22 |
2 | Derk | 30 |
Matlamat kami adalah untuk mengemas kini lajur value
dalam tableB
dengan nilai yang sepadan daripada tableA
, memadankan baris berdasarkan lajur name
.
Kaedah 1: Menggunakan Subkueri
Pendekatan paling mudah melibatkan pernyataan UPDATE
dengan subkueri:
<code class="language-sql">UPDATE tableB SET value = (SELECT value FROM tableA WHERE tableA.name = tableB.name) WHERE EXISTS (SELECT 1 FROM tableA WHERE tableA.name = tableB.name);</code>
Pernyataan ini dikemas kini tableB.value
dengan value
dari tableA
tempat medan name
sepadan. Klausa WHERE EXISTS
memastikan bahawa hanya baris dengan nama yang sepadan dalam kedua-dua jadual dikemas kini, mengelakkan ralat jika nama wujud dalam tableB
tetapi tidak dalam tableA
.
Kaedah 2: Menggunakan JOIN
Kaedah yang lebih fleksibel menggunakan INNER JOIN
untuk pemadanan yang cekap:
<code class="language-sql">UPDATE tableB INNER JOIN tableA ON tableB.name = tableA.name SET tableB.value = tableA.value;</code>
Pendekatan ini secara langsung menyertai tableB
dan tableA
pada lajur name
dan mengemas kini tableB.value
dengan tableA.value
untuk setiap baris yang sepadan. Ini biasanya lebih pantas daripada menggunakan subkueri.
Kaedah 3: Kemas Kini Bersyarat dengan JOIN
Untuk kemas kini bersyarat, di mana anda mungkin ingin mengemas kini hanya dalam keadaan tertentu, gunakan pernyataan IF
atau CASE
dalam fasal SET
:
<code class="language-sql">UPDATE tableB INNER JOIN tableA ON tableB.name = tableA.name SET tableB.value = IF(tableA.value > 0, tableA.value, tableB.value) WHERE tableA.name = 'Joe';</code>
Contoh ini hanya mengemas kini tableB.value
jika tableA.value
lebih besar daripada 0 dan hanya untuk baris dengan tableA.name
ialah 'Joe'. Anda boleh menyesuaikan keadaan IF
atau CASE
untuk memenuhi keperluan khusus anda. Ingat untuk menggantikan 'Joe'
dengan keadaan yang sesuai untuk bekas penggunaan anda.
Pilih kaedah yang paling sesuai dengan keperluan anda. Kaedah 2 (menggunakan JOIN
) biasanya lebih disukai kerana kecekapan dan kebolehbacaannya, manakala Kaedah 3 menawarkan kawalan yang lebih besar ke atas proses kemas kini. Sentiasa sandarkan data anda sebelum menjalankan UPDATE
pernyataan.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengemas kini Nilai Lajur dalam Satu Jadual Berdasarkan Nilai daripada Jadual Lain?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!