MySQL 根据另一个表值更新表

Posted

技术标签:

【中文标题】MySQL 根据另一个表值更新表【英文标题】:MySQL update table based on another tables value 【发布时间】:2012-09-05 20:19:48 【问题描述】:

我有两张桌子,

这是我的第一张桌子,

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
...     ...             ...

感谢您的帮助和指导。

【问题讨论】:

【参考方案1】:
UPDATE TABLE2
       JOIN TABLE1
       ON TABLE2.SERIAL_ID = TABLE1.SUBST_ID
SET    TABLE2.BRANCH_ID = TABLE1.CREATED_ID;

【讨论】:

您好,我在使用此解决方案时遇到错误。 '错误代码:1175。您正在使用安全更新模式,并且您尝试更新没有使用 KEY 列的 WHERE 的表。要禁用安全模式,请切换 Preferences -> SQL Editor 中的选项并重新连接。' 我用 where 条件修改了查询,但仍然是同样的错误。 QUERY: update contract c join contractstatus c set c.status=cs.status where cs.contract=c.id; 有什么办法可以在不禁用mysql安全模式的情况下做到这一点。 您需要为需要更新的列定义一个索引,然后错误然后安全模式错误就会消失【参考方案2】:

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

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

【讨论】:

【参考方案3】:
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='';

【讨论】:

能否请您详细说明您的答案,添加更多关于您提供的解决方案的描述? 通过在 subset_Id 和 Serial_Id 上使用连接,您将获得一个结果集。该结果集将包含已创建的 id..现在集中在 SET 之后的查询,我们实际上将 created_Id 中的值分配或提供给 Branch_Id 。 ...希望你明白.. :)【参考方案4】:

我认为这应该可行

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

【讨论】:

【参考方案5】:

在 SQL 中使用 Inner join 查询更新非常简单。无需 使用 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";

【讨论】:

【参考方案6】:

使用INNER JOIN

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;

【讨论】:

【参考方案7】:

你也可以用这个:

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

但是以我的经验我可以说这种方式太慢了,不推荐!

【讨论】:

以上是关于MySQL 根据另一个表值更新表的主要内容,如果未能解决你的问题,请参考以下文章

从具有多个条目的另一个表更新MYSQL

根据关系表值从另一个表中选择

mysql 根据一个表的数据更新另一个表

mysql 根据一个表的数据更新另一个表

mysql更新一个表不在另一个表中的数据

如何使用表值来驱动使用 PHP 的 mySQL 查询