You can‘t specify target table ‘表名‘ for update in FROM clause错误问题处理

You can't specify target table '表名' for update in FROM clause;

这是一个 MySQL 数据库错误消息,它的意思是你正在尝试执行一个 UPDATE 操作,并且在这个操作中想要直接从要更新的表中用 FROM 子句来选择数据。MySQL 不允许这样做,因为它可能会导致一些不一致和不确定的情况。

例如,以下的 SQL 语句会触发这个错误:

UPDATE oa_phone_caller_record
SET some_column = some_value
WHERE some_other_column IN (
    SELECT some_other_column FROM oa_phone_caller_record WHERE yet_another_column = some_condition
);

在这个例子中,你正在尝试更新 oa_phone_caller_record 表,并且更新的条件依赖于从相同的表中选择出来的数据。MySQL 在执行这种类型的查询时遇到了问题。

要解决这个问题,有几种方法可以绕过这个限制:

  1. 使用临时表 - 首先将需要的数据选择到一个临时表中,然后使用这个临时表来进行更新。
  2. 使用变量 - 如果可能的话,存储查询结果到变量中,然后使用这个变量进行更新。
  3. 使用不同的逻辑或者 JOINs - 重写查询以使用 JOIN 或者其他逻辑来达成目的,而不是在 FROM 子句中引用相同的表。

下面是使用 JOIN 来重写上述语句的例子:

UPDATE oa_phone_caller_record AS a
JOIN (
    SELECT some_other_column
    FROM oa_phone_caller_record
    WHERE yet_another_column = some_condition
) AS b ON a.some_other_column = b.some_other_column
SET a.some_column = some_value;

在这个修改过的查询中,我们创建了一个名为 b 的派生表(也就是子查询给出的结果集),并且通过 JOIN 把它与原始的 oa_phone_caller_record 表(别名为 a)相连。然后通过这个连接来更新需要的列。这种方式通常可以规避直接在 FROM 子句中引用同一个更新表的限制。

  • 8
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值