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

如何依据A、B表条件更新C表inAorB列的所有行

解决方案

表结构说明

  • 表A:
aId    aCode
1      ABC
2      DEF
3      GHI
  • 表B:
bId    bCode
1      JKL
2      MNO
3      PQR
  • 表C(初始状态):
cId    cCode inAorB
1      ABC    NULL
2      GHI    NULL
3      PQR    NULL

更新SQL语句

可以通过两种方式实现需求:

方式1:使用CASE+EXISTS判断

逻辑直观,逐行检查cCode是否存在于A或B表:

UPDATE C
SET inAorB = CASE
    -- 优先匹配表A的情况
    WHEN EXISTS (SELECT 1 FROM A WHERE A.aCode = C.cCode) THEN 'A'
    -- 匹配表B的情况
    WHEN EXISTS (SELECT 1 FROM B WHERE B.bCode = C.cCode) THEN 'B'
    -- 可选:若存在既不在A也不在B的行,可设置默认值,比如ELSE NULL
END
-- 仅更新存在于A或B的行(如需更新所有行,可去掉WHERE条件)
WHERE EXISTS (SELECT 1 FROM A WHERE A.aCode = C.cCode)
   OR EXISTS (SELECT 1 FROM B WHERE B.bCode = C.cCode);

方式2:使用LEFT JOIN关联表

适合批量处理,通过左连接判断cCode的归属:

UPDATE C
LEFT JOIN A ON C.cCode = A.aCode
LEFT JOIN B ON C.cCode = B.bCode
SET inAorB = CASE
    WHEN A.aCode IS NOT NULL THEN 'A'
    WHEN B.bCode IS NOT NULL THEN 'B'
END
WHERE A.aCode IS NOT NULL OR B.bCode IS NOT NULL;

说明

  • 若cCode同时出现在表A和表B,两种写法都会优先将inAorB设为'A',符合需求规则。
  • 若要更新表C所有行(包括不在A/B中的行),去掉WHERE条件即可,此时不在A/B中的行inAorB会保持NULL(或按ELSE设置的值)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 16:15:28