从 SQL Server 中的两个表中删除

Posted

技术标签:

【中文标题】从 SQL Server 中的两个表中删除【英文标题】:Delete from two tables in SQL Server 【发布时间】:2015-05-03 04:12:50 【问题描述】:

我有两个包含大量 IP 地址的表,我想从两个表中删除相同的表。我尝试了两次,但没有一个对我有用。

我尝试的第一个查询是:

Delete FROM table1, table2 
WHERE table1.IpAdd != table2.Ipaddress

第二个查询是:

DELETE table1, table2  
FROM table1 
INNER JOIN table2 
WHERE table1.IpAdd = table2.Ipaddress

【问题讨论】:

【参考方案1】:

您的 sql 语句相互冲突。但是,您在文本中声明要删除 ip 地址匹配的记录。在任何情况下,sql server 都不支持像您尝试的那样从 2 个表中删除。 简单的方法是使用第二次尝试的连接将 ip 地址插入到临时表中,然后从将其连接到临时表的每个表中删除记录。

【讨论】:

【参考方案2】:

为什么不使用表 1 中的外键将它们绑定到表 2。所以,如果主键中有删除,它也会自动删除其他表中的类似条目。

要创建一个外键研究这个: How do I create a foreign key in SQL Server?

【讨论】:

我想去掉两个表中的相似数据。 是的,所以当您从表 1 中删除时说像 192.168.0.10 这样的条目,它会自动从表 2 中删除同一行。 我也添加了一张图片。 为此,您至少需要其中一个表才能将 ip 列作为主键。【参考方案3】:

如果要删除两个表中的重复行,请使用此脚本:

DECLARE @table Table([Ip] varchar(20))

SELECT t1.IpAdd
INTO @table
FROM table1 t1 INNER JOIN table2 t2 On t1.IpAdd = t2.Ipaddress

DELETE FROM table1
WHERE table1.IpAdd In (SELECT [Ip] FROM @table)

DELETE FROM table2
WHERE table2.Ipaddress In (SELECT [Ip] FROM @table)

【讨论】:

以上是关于从 SQL Server 中的两个表中删除的主要内容,如果未能解决你的问题,请参考以下文章

根据 SQL Server 中表中的列值从两个表中获取一个新表:

SQL Server 中这两个循环删除查询有啥区别

如何从 SQL Server 中的表中获取不匹配的数据

SQL Server merge用法

如何从 SQL Server 2005 中另一个表中的相应数据更新一个表中的数据

sql server 2000返回在第一个表中但不在第二个表中的数据