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

Update Query执行异常:耗时过长且未完成table1的CP字段更新

问题描述

我想用table2的「SC」字段更新table1的「CP」字段,规则如下:

  • 当table2中CP与SC不相等时,将table1的CP替换为table2的SC
  • 若相等则保持table1的CP不变
    两张表通过CP字段关联。但执行下面的Update语句时,运行时间无限长且未完成更新。

表结构

table1结构

CP
stab
crawl
dred
sab

table2结构

CPSC
stabstab
crawlcrawl.com
dreddredal
sabsab

当前使用的SQL语句

update table1
set table1=try.ss from

(select table1.cp,
    CASE
        WHEN table1.cp = table2.cp THEN sc
        ELSE table1.cp
    END ss
from
    tr.table1
    left join table2 on table1.cp = table2.cp
) as try
问题分析与修正

你的SQL存在三个核心问题,这是导致执行超时的原因:

  1. 更新目标错误:set table1=try.ss 直接写表名是语法错误,应该指定要更新的字段CP
  2. 关联缺失:子查询和外层table1没有关联条件,数据库会生成笛卡尔积,处理海量无效匹配
  3. 逻辑判断错误:CASE语句里的判断条件逻辑颠倒,你需要判断的是table2.CP != table2.SC,而非table1.cp = table2.cp(关联条件本身就保证了这个等式成立)

修正后的SQL(适用于PostgreSQL、SQL Server等支持FROM子句的数据库)

UPDATE table1
SET CP = table2.SC
FROM table1
JOIN table2 ON table1.CP = table2.CP
WHERE table2.CP != table2.SC;

说明

  • 用JOIN替代子查询,逻辑更清晰且执行效率更高
  • 仅在table2.CP != table2.SC时执行更新,符合需求;相等的情况无需处理,自然保留原数值
  • 明确关联条件,彻底避免笛卡尔积问题

针对MySQL的适配写法(MySQL不支持UPDATE的FROM子句格式)

UPDATE table1
INNER JOIN table2 ON table1.CP = table2.CP
SET table1.CP = table2.SC
WHERE table2.CP != table2.SC;

内容的提问来源于stack exchange,提问作者Rohit Jha

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 09:50:26