উত্তর:
এই উত্তরটি ছাড়াও আপনার যদি টেবিলএ.ভ্যালু অনুসারে টেবিল বি.মূল্য পরিবর্তন করতে হয় তবে গতিশীলভাবে আপনি এটি করতে পারেন:
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
আপনার দুটি সারণিতে যোগদান করতে হবে:
উদাহরণস্বরূপ আপনি name
টেবিলএ থেকে তাদের মানটি tableB
যেখানে অনুলিপি করতে চান সেখানেID
UPDATE tableB t1
INNER JOIN tableA t2
ON t1.id = t2.id
SET t1.name = t2.name
WHERE t2.name = 'Joe'
আপডেট 1
UPDATE tableB t1
INNER JOIN tableA t2
ON t1.id = t2.id
SET t1.name = t2.name
আপডেট 2
UPDATE tableB t1
INNER JOIN tableA t2
ON t1.name = t2.name
SET t1.value = t2.value
where
বা ক্লজটি সংশোধন করতে পারবেন where
..
দ্বিতীয় সম্ভাবনা হ'ল,
UPDATE TableB
SET TableB.value = (
SELECT TableA.value
FROM TableA
WHERE TableA.name = TableB.name
);
.name
উভয় টেবিলে সূচিযুক্ত হয় তবে এটি ধীর হবে ?
দ্বিতীয়টি বিকল্পটি সম্ভব হয় যদি আপনি নিরাপদ আপডেট মোড ব্যবহার করেন (এবং আপনি একটি কেই কলাম ব্যবহার করে এমন একটি WHEE ছাড়াই একটি টেবিল আপডেট করার চেষ্টা করেছেন তা নির্দেশ করে একটি ত্রুটি পাচ্ছেন):
UPDATE TableB
SET TableB.value = (
SELECT TableA.value
FROM TableA
WHERE TableA.name = TableB.name
)
**where TableB.id < X**
;
টেম্প টেবিলে আপনার ডেটা সংরক্ষণ করুন
Select * into tempTable from table1
এবার কলামটি আপডেট করুন
UPDATE table1
SET table1.FileName = (select FileName from tempTable where tempTable.id = table1.ID);
আমার ক্ষেত্রে, গৃহীত সমাধানটি খুব ধীর ছিল। 180 কে সারি সহ একটি টেবিলের জন্য আপডেটের হার প্রতি সেকেন্ডে প্রায় 10 সারি ছিল। এটি যুক্ত হওয়ার উপাদানগুলির সূচকগুলির সাথে।
আমি শেষ পর্যন্ত একটি পদ্ধতি ব্যবহার করে আমার সমস্যা সমাধান করেছি:
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
আমি আশা করি এটি ভবিষ্যতে কাউকে যেমন সহায়তা করেছে তেমনভাবে সহায়তা করবে
যদি উভয় টেবিলে আপনার সাধারণ ক্ষেত্র থাকে তবে এটি এত সহজ! ....
সারণী -১ = সারণি যেখানে আপনি আপডেট করতে চান। সারণী -২ = সারণি যেখানে আপনি ডেটা নেন।
$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
এই পরিস্থিতিতে নিখুঁত। আমিCONCAT_WS
অন্য টেবিল থেকে প্রুডাক্ট নাম এবং এসকিউ মার্জ করতাম