删除一张表中与另一张表中相同的记录

Posted

技术标签:

【中文标题】删除一张表中与另一张表中相同的记录【英文标题】:DELETE records in one table that are the same records in another table 【发布时间】:2014-04-17 19:00:00 【问题描述】:

我有一个 SSIS 包,它匹配某些列,并在报告来自供应商时将它们传输到“匹配”表中。

报告进来,数据被放入“传入”表中。在这之后。我加入某些列和某个列不为空的记录(匹配的列)并将它们放入“匹配”表中。

我的问题是这样的:

如何从我加入的表中删除匹配的记录?

以下是我要从“传入”表中删除的记录的联接语句:

SELECT * FROM Incoming I
LEFT OUTER JOIN Mathced M
ON I.Name = M.Name AND I.Type = M.Type AND I.Op = M.Op AND I.DSource = M.DSource AND IDate = M.Date
WHERE M.MatchedID IS NOT NULL

【问题讨论】:

【参考方案1】:

试试这个:

DELETE FROM Incoming I
LEFT OUTER JOIN Mathced M
  ON I.Name = M.Name
    AND I.Type = M.Type
    AND I.Op = M.Op
    AND I.DSource = M.DSource
    AND I.Date = M.Date
WHERE M.MatchedID IS NOT NULL

【讨论】:

谢谢...就是这么简单。我认为这可能是脚本,但我不想删除我不应该拥有的东西。 DELETE 关键字总是让我害怕。 我想我很快就谈过了。我在OUTER 和别名M 下得到红色波浪线 别害怕,运行查询即可。 看我之前的评论【参考方案2】:
DELETE FROM Incoming I
LEFT OUTER JOIN Mathced M
ON I.Name = M.Name AND I.Type = M.Type AND I.Op = M.Op 
                   AND I.DSource = M.Source AND IDate = M.Date
WHERE M.MatchedID IS NOT NULL

【讨论】:

【参考方案3】:

这是正确的答案:

DELETE I FROM Incoming I LEFT OUTER JOIN Matched M ON I.Name = M.Name AND I.Type = M.Type AND I.Op = M.Op AND I.DSource = M.DSource AND I.Date = M.Date WHERE M.MatchedID IS NOT NULL

......因为您首先必须告诉 DBMS 您要从哪个表中删除,然后使用别名声明 JOIN

【讨论】:

所有其他答案都会给你带来波浪。

以上是关于删除一张表中与另一张表中相同的记录的主要内容,如果未能解决你的问题,请参考以下文章

SQL - 如何从一个表中获取重复记录并连接到另一张表

如何将一张表中的字符替换为另一张表的记录

如何从一个表中选择另一张表中不存在的所有记录?

如何从一个表中选择另一张表中不存在的所有记录?

SQL 显示一张表中的数据并计算另一张表中的结果

sql存储过程从一张表中查询到的值作为另一张表的新的字段