从 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 中表中的列值从两个表中获取一个新表: