Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql Delete语句不删除我认为应该删除的所有记录_Sql_Sql Server - Fatal编程技术网

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

Sql Delete语句不删除我认为应该删除的所有记录,sql,sql-server,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 I

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

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
在我完成这项工作之后,我想从表A和表B中删除用于填充表的记录。部分原因是这些表相当大,并且第一个条件将覆盖约90%的记录,因此删除它们将提高后续联接的所有性能。但更重要的是,记录在那里会影响一些后续决策逻辑

因此,我尝试删除这些记录:

DELETE a
FROM TableA a
INNER JOIN CombinedData cd
ON a.matchingField = cd.matchingField
AND a.DataDate = b.DataDate
但是,当我查看删除的记录数时,它明显少于创建的记录数(大约50%,或90%,取决于哪个表)


所以我的问题是,为什么这个查询没有删除插入到新表中的所有记录

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

因此,请将您的
DELETE a
更改为
SELECT*
,然后查看返回的行,并找出不符合标准的原因。如果不知道所涉及列的数据类型,也很难回答这个问题;例如,由于行之间的时间差很小,如果不做一些工作,datetime值很难精确匹配。