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

如何修改SQL查询以筛选仅包含Type 4001的IDNO?

筛选仅包含Type 4001的IDNO并更新Total_owe

嘿,我来帮你搞定这个需求!要找出那些只包含Type 4001的IDNO(比如示例里的2001),然后把它们的Total_owe更新为'0.00',可以分两步来实现:先精准筛选目标IDNO,再执行更新操作。

第一步:筛选仅包含Type 4001的IDNO

这里有两种常用的SQL写法,都能达到目的:

方法1:使用NOT EXISTS排除非目标IDNO

这种思路是先找到所有有Type 4001记录的IDNO,再排除掉那些存在其他Type记录的IDNO,剩下的就是纯Type 4001的IDNO:

SELECT DISTINCT t1.IDNO
FROM your_table t1
WHERE t1.Type = 4001
AND NOT EXISTS (
    SELECT 1
    FROM your_table t2
    WHERE t2.IDNO = t1.IDNO
    AND t2.Type != 4001
);

方法2:使用GROUP BY + HAVING统计验证

通过分组后统计非4001类型的记录数,当这个数量为0时,说明该IDNO下所有记录都是Type 4001:

SELECT IDNO
FROM your_table
GROUP BY IDNO
HAVING COUNT(CASE WHEN Type != 4001 THEN 1 END) = 0;

如果Type是数值型,还可以用更直观的写法:

SELECT IDNO
FROM your_table
GROUP BY IDNO
HAVING MIN(Type) = 4001 AND MAX(Type) = 4001;

第二步:更新目标IDNO的Total_owe为'0.00'

把上面的筛选结果作为子查询,结合UPDATE语句就能批量更新:

基于NOT EXISTS的更新语句

UPDATE your_table
SET Total_owe = '0.00'
WHERE IDNO IN (
    SELECT DISTINCT t1.IDNO
    FROM your_table t1
    WHERE t1.Type = 4001
    AND NOT EXISTS (
        SELECT 1
        FROM your_table t2
        WHERE t2.IDNO = t1.IDNO
        AND t2.Type != 4001
    )
);

基于GROUP BY的更新语句

UPDATE your_table
SET Total_owe = '0.00'
WHERE IDNO IN (
    SELECT IDNO
    FROM your_table
    GROUP BY IDNO
    HAVING COUNT(CASE WHEN Type != 4001 THEN 1 END) = 0
);

注意:记得把your_table替换成你实际的表名哦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:26:27