删除语句不删除我认为应该删除的所有记录

时间:2014-07-11 22:11:57

标签: sql sql-server

根据一系列规则,根据数据存在或不存在的位置,我有两个数据表,我正在尝试合并到一个统一表中。我开始根据第一条规则填充表格。

INSERT INTO CombinedData
SELECT a.matchingField,
    CASE
       WHEN a.FieldOne IS NULL
       THEN b.FieldOne
       ELSE a.FieldOne
    END as FieldOne,
    CASE
       WHEN a.FieldTwo IS NULL
       THEN b.FieldTwo
       ELSE a.FieldTwo
    END as FieldTwo,
a.FieldThree, b.FieldFour, a.DataDate
FROM TableA a
JOIN TableB b
ON a.matchingField = b.matchingField
AND a.DataDate = b.DataDate

在我完成此操作后,我想从TableA和TableB中删除用于填充表的记录。部分原因是这些表非常大,并且第一个标准将涵盖约90%的记录,因此删除它们将增加后续连接的所有性能。更重要的是,拥有记录会影响一些后续的决策逻辑。

所以,我尝试删除这些记录:

DELETE a
FROM TableA a
INNER JOIN CombinedData cd
ON a.matchingField = cd.matchingField
AND a.DataDate = b.DataDate

但是,当我查看删除的记录数时,它显着小于创建的记录数(约50%,或90%,具体取决于哪个表)。

所以我的问题是,为什么此查询不会删除已插入新表的所有记录?

1 个答案:

答案 0 :(得分:0)

这些记录是否在其他表中有子记录? 如果是,请检查是否指定了“级联删除”,以及这些表的权限。根据设置,有时您无法删除记录,如果这会在其他表中留下孤儿。