답변:
이 답변 외에도 tableA.value에 따라 tableB.value를 동적으로 변경 해야하는 경우 다음과 같이 할 수 있습니다.
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
tableA 의 값을 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
두 테이블 모두에서 색인이 생성 되면 여전히 느릴 까요?
필자의 경우 허용 된 솔루션이 너무 느 렸습니다. 180K 개의 행이있는 테이블의 경우 업데이트 속도는 초당 약 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
나는 그것이 나를 돕는 것처럼 미래에 누군가를 도울 수 있기를 바랍니다.
두 테이블에 공통 필드가 있으면 너무 쉽습니다! ....
Table-1 = 업데이트하려는 테이블입니다. Table-2 = 데이터를 가져 오는 테이블.
$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
다른 테이블에서 pruduct 이름과 SKU를 병합 하는 데 사용 되었습니다