Oracle SQL验证主从记录计数一致性的单查询需求
主从记录子项数校验查询(找出不符记录)
直接通过关联子查询合并两个统计逻辑,同时处理数值类型转换避免字符串对比异常,最终仅输出实际子项数与预期不符的记录:
SELECT a.MULTI_ID, a.TOTAL AS ACTUAL, e.TOTAL AS EXPECTED FROM ( -- 统计实际子项数(减去主记录本身) SELECT MULTI_ID, COUNT(*) - 1 AS TOTAL FROM TABLE WHERE MULTI_ID IN (SELECT MULTI_ID FROM TABLE WHERE ID = MULTI_ID) GROUP BY MULTI_ID ) a JOIN ( -- 提取预期子项数并转为数值类型 SELECT MULTI_ID, TO_NUMBER(EXTRACT(XML, '/data/qty/text()').getStringVal()) AS TOTAL FROM TABLE WHERE ID = MULTI_ID ) e ON a.MULTI_ID = e.MULTI_ID WHERE a.TOTAL != e.TOTAL;
关键说明:
- 实际子项数保留原逻辑:用
COUNT(*)-1剔除主记录本身,得到真实子项数量 - 预期子项数通过
TO_NUMBER转换为数值,避免字符串与数字对比产生的逻辑错误 - 关联两个子查询后筛选数值不等的记录,输出格式完全匹配需求,比如针对
MULTI_ID=8的场景会输出:
MULTI_ID ACTUAL EXPECTED 8 0 1
内容的提问来源于stack exchange,提问作者Somebody
相关产品推荐
相关产品推荐

