mysql update column with value from another table

MysqlSqlSql Update

Mysql Problem Overview


I have two tables, both looking like

id  name  value
===================
1   Joe     22
2   Derk    30

I need to copy the value of value from tableA to tableB based on check name in each table.

Any tips for this UPDATE statement?

Mysql Solutions


Solution 1 - Mysql

In addition to this answer if you need to change tableB.value according to tableA.value dynamically you can do for example:

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'

Solution 2 - Mysql

you need to join the two tables:

for instance you want to copy the value of name from tableA into tableB where they have the same ID

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

Solution 3 - Mysql

Second possibility is,

UPDATE TableB 
SET TableB.value = (
    SELECT TableA.value 
    FROM TableA
    WHERE TableA.name = TableB.name
);

Solution 4 - Mysql

    UPDATE    cities c,
          city_langs cl
    SET       c.fakename = cl.name
   WHERE     c.id = cl.city_id

Solution 5 - Mysql

The second option is feasible also if you're using safe updates mode (and you're getting an error indicating that you've tried to update a table without a WHERE that uses a KEY column), by adding:

UPDATE TableB  
SET TableB.value = (  
SELECT TableA.value  
    FROM TableA  
    WHERE TableA.name = TableB.name  
)  
**where TableB.id < X**  
;

Solution 6 - Mysql

Store your data in temp table

Select * into tempTable from table1

Now update the column

 UPDATE table1
 	SET table1.FileName = (select FileName from tempTable where tempTable.id = table1.ID);

Solution 7 - Mysql

In my case, the accepted solution was just too slow. For a table with 180K rows the rate of updates was about 10 rows per second. This is with the indexes on the join elements.

I finally resolved my issue using a 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

I hope it will help someone in the future like it helped me

Solution 8 - Mysql

If you have common field in both table then it's so easy !....

Table-1 = table where you want to update. Table-2 = table where you from take data.

  1. make query in Table-1 and find common field value.
  2. make a loop and find all data from Table-2 according to table 1 value.
  3. again make update query in table 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();
	}
	
	
}

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionLeoSamView Question on Stackoverflow
Solution 1 - MysqlRafaSashiView Answer on Stackoverflow
Solution 2 - MysqlJohn WooView Answer on Stackoverflow
Solution 3 - MysqlSamir AlajmovicView Answer on Stackoverflow
Solution 4 - MysqlaitbellaView Answer on Stackoverflow
Solution 5 - Mysqlraul7View Answer on Stackoverflow
Solution 6 - MysqlAbid MahmoodView Answer on Stackoverflow
Solution 7 - MysqljustadevView Answer on Stackoverflow
Solution 8 - MysqlMahabubur Rahman MasumView Answer on Stackoverflow