选择和更新正在返回/更新具有相同连接的不同数量的记录

时间:2014-08-05 14:37:09

标签: sql sql-server select join sql-update

原谅我的长期问题,但我更多的是寻找故障排除建议。 A.DR_CRB.DR_CR都有distinct个值'D''C'我想审核表A中的值将被更改的记录数(D到C或反之亦然)因此我在更新语句之前编写了以下select。连接键IDSRC_TRAN_ID在两个表中都不是唯一的。

select语句显示更新为借记(CR_TO_DB)的信用计数为588017 和DB_TO_CR是924119

但是,当我使用相同的加入条件运行更新时,我发现更新为借记的信用数量比CR_TO_DB的上述选择结果少3257,同样地,DB_TO_CR计数是3257更多比924119。

我无法解决为什么更新不会更新具有相同连接条件的select返回的记录数的原因。请帮忙。

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

1 个答案:

答案 0 :(得分:0)

我将用更简单的术语解释它与较小的数据集。鉴于这两个表:

CREATE TABLE TableA (Col1 INT, Col2 INT, Col3 VARCHAR(10))
CREATE TABLE TableB (Col1 INT, Col2 INT, Col3 VARCHAR(10))

INSERT INTO TableA (Col1, Col2, Col3) VALUES (1, 1, 'a')
INSERT INTO TableA (Col1, Col2, Col3) VALUES (1, 1, 'b')
INSERT INTO TableA (Col1, Col2, Col3) VALUES (1, 2, 'c')

INSERT INTO TableB (Col1, Col2, Col3) VALUES (1, 1, 'd')
INSERT INTO TableB (Col1, Col2, Col3) VALUES (1, 1, 'e')
INSERT INTO TableB (Col1, Col2, Col3) VALUES (1, 2, 'f')

此查询将为您提供5行,因为Col1=1, Col2=1在两个表上都存在两次。

SELECT *
FROM TableA
JOIN TableB ON TableA.Col1 = TableB.Col1 AND TableA.Col2 = TableB.Col2

你得到像这样的Col3对:

a, d
b, d
a, e
b, e
c, f

使用相同连接的UPDATE语句实质上过滤掉了唯一记录,并仅对它们进行报告。毕竟,您想知道有多少记录受到影响。