MySQL update table based on another tables value

MysqlJoinSql Update

Mysql Problem Overview


I have a two tables,

Here is my first table,

ID		SUBST_ID		CREATED_ID
1		031938			TEST123
2		930111			COOL123
3		000391			THIS109
4		039301			BRO1011
5		123456			COOL938
...		...				...

This is my second table,

ID		SERIAL_ID		BRANCH_ID
1		039301			NULL
2		000391			NULL
3		123456			NULL
...		...				...

I need to some how update all rows within my second table using data from my first table.

It would need to do this all in one update query.

Both SUBST_ID and SERIAL_ID match, it needs to grab the created_id from the first table and insert it into the second table.

So the second table would become the following,

ID		SERIAL_ID		BRANCH_ID
1		039301			BRO1011
2		000391			THIS109
3		123456			COOL938
...		...				...

Thank you for your help and guidance.

Mysql Solutions


Solution 1 - Mysql

UPDATE TABLE2
       JOIN TABLE1
       ON TABLE2.SERIAL_ID = TABLE1.SUBST_ID
SET    TABLE2.BRANCH_ID = TABLE1.CREATED_ID;

Solution 2 - Mysql

In addition to Tom's answer if you need to repeat the operation frequently and want to save time you can do:

UPDATE TABLE1
       JOIN TABLE2
       ON TABLE1.SUBST_ID = TABLE2.SERIAL_ID
SET    TABLE2.BRANCH_ID = TABLE1.CREATED_ID
WHERE TABLE2.BRANCH_ID IS NULL

Solution 3 - Mysql

UPDATE TABLE2
       JOIN TABLE1
       ON TABLE1.SUBST_ID = TABLE2.SERIAL_ID
SET    TABLE2.BRANCH_ID = TABLE1.CREATED_ID 
WHERE TABLE2.BRANCH_ID IS NULL or TABLE2.BRANCH_ID='';

Solution 4 - Mysql

I think this should work

UPDATE secondTable
JOIN firsTable ON secondTable.SERIAL_ID = firsTable.SUBST_ID
SET BRANCH_ID = CREATED_ID

Solution 5 - Mysql

It is very simple to update using Inner join query in SQL .You can do it without using FROM clause. Here is an example :

    UPDATE customer_table c 

      INNER JOIN  
          employee_table e
          ON (c.city_id = e.city_id)  

    SET c.active = "Yes"

    WHERE c.city = "New york";

Solution 6 - Mysql

Using INNER JOIN:

UPDATE TABLE1
INNER JOIN TABLE2 ON TABLE1.SUBST_ID = TABLE2.SERIAL_ID
SET TABLE2.BRANCH_ID = TABLE1.CREATED_ID;

Another alternative solution like below: Here I am using WHERE clause instead of JOIN

UPDATE 
	TABLE1,
	TABLE2
WHERE
	TABLE1.SUBST_ID = TABLE2.SERIAL_ID
SET 
	TABLE2.BRANCH_ID = TABLE1.CREATED_ID;

Solution 7 - Mysql

You can use this too:

update TABLE1 set BRANCH_ID = ( select BRANCH_ID from TABLE2 where TABLE1.SUBST_ID = TABLE2.SERIAL_ID)

but with my experience I can say that this way is so slow and not recommend it!

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
QuestionverheesjView Question on Stackoverflow
Solution 1 - MysqlTomView Answer on Stackoverflow
Solution 2 - MysqlRafaSashiView Answer on Stackoverflow
Solution 3 - MysqlMohammad ImranView Answer on Stackoverflow
Solution 4 - MysqlGonzalo.-View Answer on Stackoverflow
Solution 5 - MysqlvishwampandyaView Answer on Stackoverflow
Solution 6 - MysqlFaisalView Answer on Stackoverflow
Solution 7 - MysqlAbadisView Answer on Stackoverflow