MySQL更新表基于另一个表值

时间:2012-09-12 18:52:55

标签: mysql join sql-update

我有两张桌子,

这是我的第一张表,

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

这是我的第二张表,

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

我需要一些如何使用第一个表中的数据更新第二个表中的所有行。

需要在一个更新查询中执行此操作。

SUBST_ID和SERIAL_ID都匹配,它需要从第一个表中获取created_id并将其插入第二个表。

所以第二个表将成为以下内容,

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

感谢您的帮助和指导。

7 个答案:

答案 0 :(得分:111)

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

答案 1 :(得分:16)

除了汤姆的回答,如果您需要经常重复操作并希望节省时间,您可以这样做:

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

答案 2 :(得分:3)

我认为这应该有用

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

答案 3 :(得分:2)

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='';

答案 4 :(得分:0)

使用string

INNER JOIN

另一种替代解决方案如下:我在这里使用UPDATE TABLE1 INNER JOIN TABLE2 ON TABLE1.SUBST_ID = TABLE2.SERIAL_ID SET TABLE2.BRANCH_ID = TABLE1.CREATED_ID; 子句代替WHERE

JOIN

答案 5 :(得分:0)

您也可以使用它:

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

但根据我的经验,我可以说这种方式很慢,不推荐它!

答案 6 :(得分:0)

使用SQL中的内部联接查询来更新非常简单。您可以使用 FROM子句来做到这一点。这是一个示例:

    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";