MySQL基于另一个表值更新表

MySQL基于另一个表值更新表,mysql,join,sql-update,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      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都匹配,它需要从第一个表中获取创建的_ID并将其插入第二个表中

所以第二张表将变成如下所示

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

谢谢你的帮助和指导。

我认为这应该行得通

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

除了Tom的回答之外,如果您需要频繁地重复操作,并且想要节省时间,您可以执行以下操作:

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

使用
内部联接

UPDATE TABLE1
INNER JOIN TABLE2 ON TABLE1.SUBST_ID = TABLE2.SERIAL_ID
SET TABLE2.BRANCH_ID = TABLE1.CREATED_ID;
另一个类似下面的替代解决方案:这里我使用
WHERE
子句而不是
JOIN

UPDATE 
    TABLE1,
    TABLE2
WHERE
    TABLE1.SUBST_ID = TABLE2.SERIAL_ID
SET 
    TABLE2.BRANCH_ID = TABLE1.CREATED_ID;
您也可以使用此选项:

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

但以我的经验,我可以说,这种方式是如此缓慢,不推荐它

在SQL中使用内部连接查询进行更新非常简单。您可以使用
FROM
子句而不使用
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";

请您详细说明您的答案,再添加一点关于您提供的解决方案的描述,好吗?通过对子集\u Id和序列\u Id使用联接,您将得到一个结果集。该结果集将包含创建的Id。现在集中精力在集后查询,我们实际将创建的\u Id的值分配或提供给分支\u Id…希望您理解……)您好,我在使用此解决方案时出错。”错误代码:1175。您使用的是安全更新模式,并且您尝试在没有WHERE的情况下更新使用键列的表。要禁用安全模式,请切换“首选项->SQL编辑器”中的选项并重新连接。“我使用where条件修改了查询,但仍然存在相同的错误。查询:更新合同c加入合同状态cs set c.status=cs.status,其中cs.CONTACT=c.id;在mysql中,有没有任何方法可以在不禁用安全模式的情况下做到这一点。
update TABLE1 set BRANCH_ID = ( select BRANCH_ID from TABLE2 where TABLE1.SUBST_ID = TABLE2.SERIAL_ID)
    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";