Ik heb twee tabellen, beide zien eruit als
id name value
===================
1 Joe 22
2 Derk 30
Ik moet de waarde van value
kopiëren van tableA
naar tableB
op basis van de chequenaam in elke tabel.
Enige tips voor deze UPDATE
-instructie?
Antwoord 1, autoriteit 100%
Als u naast dit antwoord tableB.value dynamisch moet wijzigen volgens tableA.value, kunt u bijvoorbeeld het volgende doen:
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'
Antwoord 2, autoriteit 36%
je moet de twee tafels samenvoegen:
u wilt bijvoorbeeld de waarde van name
kopiëren van tableA naar tableB
waar ze dezelfde ID
hebben
UPDATE tableB t1
INNER JOIN tableA t2
ON t1.id = t2.id
SET t1.name = t2.name
WHERE t2.name = 'Joe'
UPDATE 1
UPDATE tableB t1
INNER JOIN tableA t2
ON t1.id = t2.id
SET t1.name = t2.name
UPDATE 2
UPDATE tableB t1
INNER JOIN tableA t2
ON t1.name = t2.name
SET t1.value = t2.value
Antwoord 3, autoriteit 21%
Tweede mogelijkheid is,
UPDATE TableB
SET TableB.value = (
SELECT TableA.value
FROM TableA
WHERE TableA.name = TableB.name
);
Antwoord 4
UPDATE cities c,
city_langs cl
SET c.fakename = cl.name
WHERE c.id = cl.city_id
Antwoord 5
De tweede optie is ook mogelijk als je de modus voor veilige updates gebruikt (en je krijgt een foutmelding die aangeeft dat je hebt geprobeerd een tabel bij te werken zonder een WHERE die een KEY-kolom gebruikt), door toe te voegen:
p>
UPDATE TableB
SET TableB.value = (
SELECT TableA.value
FROM TableA
WHERE TableA.name = TableB.name
)
**where TableB.id < X**
;
Antwoord 6
Sla uw gegevens op in de tijdelijke tabel
Select * into tempTable from table1
Update nu de kolom
UPDATE table1
SET table1.FileName = (select FileName from tempTable where tempTable.id = table1.ID);
Antwoord 7
In mijn geval was de geaccepteerde oplossing gewoon te traag. Voor een tabel met 180K rijen was de snelheid van updates ongeveer 10 rijen per seconde. Dit is met de indexen op de join-elementen.
Ik heb mijn probleem eindelijk opgelost met een procedure:
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
Ik hoop dat het in de toekomst iemand zal helpen zoals het mij heeft geholpen
Antwoord 8
Als je een gemeenschappelijk veld hebt in beide tabellen, dan is het zo makkelijk !….
Tabel-1 = tabel waarin u wilt bijwerken.
Tabel-2 = tabel waar u gegevens vandaan haalt.
- maak een query in Tabel-1 en vind de gemeenschappelijke veldwaarde.
- maak een lus en vind alle gegevens uit tabel-2 volgens de waarde van tabel 1.
- maak opnieuw een update-query in tabel 1.
$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();
}
}