Jawaban:
Selain jawaban ini jika Anda perlu mengubah tableB.value sesuai dengan tableA.value secara dinamis dapat Anda lakukan misalnya:
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'
UPDATE participants_registrations INNER JOIN participants ON participants.id = participants_registrations.participantId INNER JOIN registrations ON registrations.id = participants_registrations.registrationId LEFT JOIN groups ON (groups.id = registrations.groupId) SET registrations.groupId = groups.id, registrations.groupName = groups.name, participants.memberOfGroupName = groups.name
Anda harus bergabung dengan dua tabel:
misalnya Anda ingin menyalin nilai name
dari tableA ke tableB
tempat mereka memiliki nilai yang samaID
UPDATE tableB t1
INNER JOIN tableA t2
ON t1.id = t2.id
SET t1.name = t2.name
WHERE t2.name = 'Joe'
PEMBARUAN 1
UPDATE tableB t1
INNER JOIN tableA t2
ON t1.id = t2.id
SET t1.name = t2.name
PEMBARUAN 2
UPDATE tableB t1
INNER JOIN tableA t2
ON t1.name = t2.name
SET t1.value = t2.value
where
klausa atau memodifikasi where
klausa tergantung pada kebutuhan Anda ..
Kemungkinan kedua adalah,
UPDATE TableB
SET TableB.value = (
SELECT TableA.value
FROM TableA
WHERE TableA.name = TableB.name
);
.name
diindeks pada kedua tabel?
Opsi kedua juga layak jika Anda menggunakan mode pembaruan aman (dan Anda mendapatkan kesalahan yang menunjukkan bahwa Anda telah mencoba memperbarui tabel tanpa WHERE yang menggunakan kolom KUNCI), dengan menambahkan:
UPDATE TableB
SET TableB.value = (
SELECT TableA.value
FROM TableA
WHERE TableA.name = TableB.name
)
**where TableB.id < X**
;
Simpan data Anda di tabel temp
Select * into tempTable from table1
Sekarang perbarui kolom
UPDATE table1
SET table1.FileName = (select FileName from tempTable where tempTable.id = table1.ID);
Dalam kasus saya, solusi yang diterima terlalu lambat. Untuk tabel dengan baris 180K, laju pembaruan adalah sekitar 10 baris per detik. Ini dengan indeks pada elemen gabungan.
Saya akhirnya menyelesaikan masalah saya menggunakan prosedur:
CREATE DEFINER=`my_procedure`@`%` PROCEDURE `rescue`()
BEGIN
declare str VARCHAR(255) default '';
DECLARE n INT DEFAULT 0;
DECLARE i INT DEFAULT 0;
DECLARE cur_name VARCHAR(45) DEFAULT '';
DECLARE cur_value VARCHAR(10000) DEFAULT '';
SELECT COUNT(*) FROM tableA INTO n;
SET i=0;
WHILE i<n DO
SELECT namea,valuea FROM tableA limit i,1 INTO cur_name,cur_value;
UPDATE tableB SET nameb=cur_name where valueb=cur_value;
SET i = i + 1;
END WHILE;
END
Saya berharap ini akan membantu seseorang di masa depan seperti itu membantu saya
Jika Anda memiliki bidang yang sama di kedua tabel maka itu sangat mudah! ....
Tabel-1 = tabel tempat Anda ingin memperbarui. Tabel-2 = tabel tempat Anda mengambil data.
$qry_asseet_list = mysql_query("SELECT 'primary key field' FROM `table-1`");
$resultArray = array();
while ($row = mysql_fetch_array($qry_asseet_list)) {
$resultArray[] = $row;
}
foreach($resultArray as $rec) {
$a = $rec['primary key field'];
$cuttable_qry = mysql_query("SELECT * FROM `Table-2` WHERE `key field name` = $a");
$cuttable = mysql_fetch_assoc($cuttable_qry);
echo $x= $cuttable['Table-2 field']; echo " ! ";
echo $y= $cuttable['Table-2 field'];echo " ! ";
echo $z= $cuttable['Table-2 field'];echo " ! ";
$k = mysql_query("UPDATE `Table-1` SET `summary_style` = '$x', `summary_color` = '$y', `summary_customer` = '$z' WHERE `summary_laysheet_number` = $a;");
if ($k) {
echo "done";
} else {
echo mysql_error();
}
}
INNER JOIN
sempurna dalam situasi ini. Saya juga biasaCONCAT_WS
menggabungkan nama pruduct dan SKU dari tabel lain