You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MySQL同表更新问题:xID与ID值相等时更新行

解决方案:MySQL同表更新匹配xID与ID的行

咱们先捋清楚你的核心需求:当某行的xID值等于另一行的ID值时,用ID匹配行的Euro字段更新xID匹配行的Euro字段。你之前的更新语句没生效,问题出在关联条件写反了,咱们来一步步修正。

问题分析

你之前的语句用了kkk.ID = jjj.xID作为关联条件,但这和你的需求完全相反——你要找的是「需要被更新的行的xID等于源数据行的ID」,也就是kkk.xID = jjj.ID,这就是为什么语句执行后匹配不到任何行的原因。

正确的更新语句

下面是贴合你需求的修正版语句:

UPDATE `tbl_g` kkk
JOIN `tbl_g` jjj ON kkk.xID = jjj.ID
SET kkk.Euro = jjj.Euro
WHERE kkk.xID IS NOT NULL; -- 过滤掉无xID的行,避免无效匹配

语句详解

  • 我们通过自连接把表拆成两个逻辑别名:kkk是需要被更新的「目标行」(比如你示例里xID=2025、ID=4441的行),jjj是提供数据的「源行」(比如你示例里ID=2025的行)。
  • JOIN条件kkk.xID = jjj.ID精准锁定了符合需求的行对:目标行的xID对应源行的ID。
  • WHERE kkk.xID IS NOT NULL可以避免对没有xID值的行做无意义的匹配操作。

验证效果(用你的示例数据)

执行完更新语句后,再执行查询:

SELECT Euro, ALMACEN, Imagen, xID, ID FROM `tbl_g` WHERE xID IN (2025) OR ID IN (2025);

会得到预期的结果:

+--------+----------+--------+------+------+
| Euro   | ALMACEN  | Imagen | xID  | ID   |
+--------+----------+--------+------+------+
| 7742,8 | ARGUALAS | NULL   | NULL | 2025 |
| 7742,8 | EMPALME  |        | 2025 | 4441 |
+--------+----------+--------+------+------+

能看到ID=4441的行的Euro已经成功被更新为源行的7742,8了。

额外提示

如果要批量更新所有符合xID=ID规则的行(不止xID=2025的情况),直接去掉语句里的过滤限制即可,上面的写法本身就支持批量更新。


内容的提问来源于stack exchange,提问作者Antonio Mailtraq

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 08:19:59