Respuestas:
Además de esta respuesta, si necesita cambiar dinámicamente el valor tableB.según el valor tableA.valor, puede hacer, por ejemplo:
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
necesitas unir las dos tablas:
por ejemplo, desea copiar el valor de name
tableA en tableB
donde tienen el mismoID
UPDATE tableB t1
INNER JOIN tableA t2
ON t1.id = t2.id
SET t1.name = t2.name
WHERE t2.name = 'Joe'
ACTUALIZACIÓN 1
UPDATE tableB t1
INNER JOIN tableA t2
ON t1.id = t2.id
SET t1.name = t2.name
ACTUALIZACIÓN 2
UPDATE tableB t1
INNER JOIN tableA t2
ON t1.name = t2.name
SET t1.value = t2.value
where
cláusula o modificarla where
según sus necesidades ..
La segunda posibilidad es,
UPDATE TableB
SET TableB.value = (
SELECT TableA.value
FROM TableA
WHERE TableA.name = TableB.name
);
.name
se indexa en ambas tablas?
La segunda opción también es factible si está utilizando el modo de actualizaciones seguras (y obtiene un error que indica que ha intentado actualizar una tabla sin un DÓNDE que usa una columna CLAVE), agregando:
UPDATE TableB
SET TableB.value = (
SELECT TableA.value
FROM TableA
WHERE TableA.name = TableB.name
)
**where TableB.id < X**
;
Almacene sus datos en la tabla temporal
Select * into tempTable from table1
Ahora actualice la columna
UPDATE table1
SET table1.FileName = (select FileName from tempTable where tempTable.id = table1.ID);
En mi caso, la solución aceptada fue demasiado lenta. Para una tabla con 180K filas, la tasa de actualizaciones fue de aproximadamente 10 filas por segundo. Esto es con los índices en los elementos de unión.
Finalmente resolví mi problema usando un procedimiento:
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
Espero que ayude a alguien en el futuro como me ayudó
Si tiene un campo común en ambas tablas, ¡entonces es tan fácil! ...
Tabla-1 = tabla donde desea actualizar. Tabla-2 = tabla de donde tomas los datos.
$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
es perfecto en esta situación. También solíaCONCAT_WS
fusionar el nombre del producto y el SKU de otra tabla