Oracle验证查询:校验TransactionConfig表数据准确性
Oracle 查询:验证TransactionConfig的ConfigId数量是否符合预期
我们可以通过子查询+关联统计的方式实现需求,核心是先算出每个TransactionId对应的预期ConfigId数量,再和TransactionConfig中的实际记录数对比:
SELECT pt.TransactionId, pc.Expected_Config_Count, tc.Actual_Config_Count, CASE WHEN pc.Expected_Config_Count = tc.Actual_Config_Count THEN 1 ELSE 0 END AS Status FROM -- 第一步:获取每个TransactionId对应的ProductId,以及该ProductId的预期ConfigId总数 ( SELECT pt.TransactionId, COUNT(pc.ConfigId) AS Expected_Config_Count FROM ProductTransaction pt LEFT JOIN ProductConfig pc ON pt.ProductId = pc.ProductId GROUP BY pt.TransactionId ) pc -- 第二步:获取每个TransactionId在TransactionConfig中的实际ConfigId记录数 LEFT JOIN ( SELECT TransactionId, COUNT(ConfigId) AS Actual_Config_Count FROM TransactionConfig GROUP BY TransactionId ) tc ON pc.TransactionId = tc.TransactionId -- 可选:如果仅需验证存在TransactionConfig记录的交易,可将LEFT JOIN改为INNER JOIN ORDER BY pc.TransactionId;
逻辑说明
- 内层子查询
pc:通过ProductTransaction关联ProductConfig,按TransactionId分组统计出每个交易对应的产品应有的ConfigId总数(预期值)。 - 内层子查询
tc:按TransactionId分组统计TransactionConfig中实际的ConfigId记录数(实际值)。 - 外层关联两个统计结果,用
CASE判断预期与实际是否相等,输出Status(1表示匹配,0表示不匹配)。
示例验证
比如TransactionId 601关联ProductId 6,ProductConfig中ProductId 6有2条ConfigId记录(预期数2),但TransactionConfig中TransactionId 601只有1条ConfigId记录(实际数1),则该条记录的Status会显示为0。
内容的提问来源于stack exchange,提问作者Seegel
相关产品推荐
相关产品推荐

