如何修改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
相关产品推荐
相关产品推荐

