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

如何在另一表无对应值时更新数据表?附多表结构示例

实现“当Table_B无对应记录时更新Table_C”的SQL方案

嘿,针对你提出的需求——当Table_B里不存在某个(idA, typ)组合的记录时,更新Table_C对应的行,我整理了一套可行的SQL方案,结合你的表结构来具体说明:

核心更新语句

假设你希望把Table_C中那些在Table_B里找不到对应记录的行,比如把total设为0(你可以换成自己需要的更新值),可以用下面的语句:

UPDATE Table_C
SET total = 0 -- 这里替换成你实际要更新的字段和值
WHERE NOT EXISTS (
    SELECT 1
    FROM Table_B
    WHERE Table_B.idA = Table_C.idA
      AND Table_B.typ = Table_C.typ
);

逻辑拆解

  • 这个语句的核心是NOT EXISTS子查询:它会逐行检查Table_C的每一条记录,去Table_B里找有没有相同idA和typ的行。
  • 如果子查询啥都没查到(也就是Table_B里完全没有对应(idA, typ)的记录),就会触发UPDATE,修改你指定的字段。

用你的示例数据测试

比如你把Table_B里标了*的那两行(id7、id8,typ=4的记录)删掉后,执行上面的语句:

  • Table_C中idA=10, typ=4的那一行,total就会被改成0;
  • 而typ=1、2、3的行因为在Table_B里还有对应记录,完全不会被碰。

扩展玩法:更新多个字段

如果你需要更新的不只是total,比如还要把name改成类似Dodo (已失效)这样的标记,直接在SET里加就行:

UPDATE Table_C
SET total = 0,
    name = 'Dodo (Inactive)' -- 按需添加其他字段的更新规则
WHERE NOT EXISTS (
    SELECT 1
    FROM Table_B
    WHERE Table_B.idA = Table_C.idA
      AND Table_B.typ = Table_C.typ
);

小提醒

  • 一定要确保Table_C的主键(idA, typ)和Table_B的关联逻辑是对的,不然容易更错行;
  • 如果你的表数据量很大,可以加个EXPLAIN前缀查看执行计划,确保查询效率。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 03:29:00