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 根据另一个表值更新表的主要内容,如果未能解决你的问题,请参考以下文章