【发布时间】:2014-09-28 06:35:39
【问题描述】:
请原谅我的冗长问题,但我更多的是寻找故障排除建议。 A.DR_CR 和 B.DR_CR 都有 distinct 值 'D' 或 'C' 我想审计表 A 中值将被更改的记录数(D 到 C 或反之亦然)因此我写了以下在更新语句之前选择。连接键 ID 和 SRC_TRAN_ID 在两个表中都不是唯一的。
select 语句显示更新为借方(CR_TO_DB) 的贷方计数为 588017
DB_TO_CR 是 924119
但是当我使用相同的连接条件运行更新时,我看到更新到借方的信用数比上述CR_TO_DB 的选择结果少 3257,同样,DB_TO_CR 计数比 924119 多 3257。
我无法解决为什么更新不会更新具有相同连接条件的选择返回的记录数。请帮忙。
SELECT
(CASE WHEN A.DR_CR != B.DR_CR AND A.DR_CR = 'C' AND B.DR_CR='D' THEN 1 END) CR_TO_DB
,(CASE WHEN A.DR_CR != B.DR_CR AND A.DR_CR = 'D' AND B.DR_CR='C' THEN 1 END) DB_TO_CR
INTO MTL_REPORT
FROM #STAGING_TRANSACTIONS A
JOIN #CLEAN_MTL_UPDATE B
ON A.SRC_TRANID = B.SRC_TRANID
AND A.ID = B.ID
UPDATE A
SET
A.DR_CR = B.DR_CR
FROM #STAGING_TRANSACTIONS A
JOIN #CLEAN_MTL_UPDATE B
ON A.SRC_TRANID = B.SRC_TRANID
AND A.ID = B.ID
【问题讨论】:
-
SRC_TRANID 和 ID 对在您的一个或两个临时表中多次存在。更新将过滤到唯一键并仅报告已更新的实际记录数,而选择将从 A 的角度报告可能重复的记录。对您的两个临时表尝试此查询。如果其中任何一个返回记录,则您有重复的结果。 SELECT ID, SRC_TRANID, COUNT() FROM #STAGING_TRANSACTIONS GROUP BY ID, SRC_TRANID HAVING COUNT() > 1;
标签: sql sql-server select join sql-update