如何从包含外键的表中删除,知道引用的表的主键?

时间:2015-07-30 21:40:59

标签: sql sql-server sql-server-2008 sql-delete

我在Order:Stops之间有一个很多关系。

Order.OrderId是主键。 Order.FileNumber是我想删除Stops by的列。

Stop.OrderId是外键,引用Order的主键。一个订单可以有很多停止。 Stop.StopId是Stop的主键。

首先删除订单,SQL在外键约束上出现错误。首先删除停止,然后删除相应的订单,会导致任何错误。

如果我想删除我知道Order.FileNumber的Stops,SQL语句会是什么样子?

我假设的事情如下:

DELETE FROM [dbo].[Stop] Stop LEFT JOIN [dbo].[Order] Ord
WHERE Ord.DriverNo = 123 AND Ord.FileNo = 456789 
AND Ord.OrderId = Stop.OrderId

GO

但没有任何效果。我们正在使用SQL Server 2012。

1 个答案:

答案 0 :(得分:1)

您可以使用INNER JOIN

尝试以下内容
DELETE S 
FROM [dbo].[Stop] S 
INNER JOIN [dbo].[Order] Ord
ON Ord.OrderId = S.OrderId
WHERE Ord.DriverNo = 123 
AND Ord.FileNo = 456789 

您可以使用ON DELETE CASCADE进行级联删除,同时使用ALTER TABLE ...语句定义外键(OR),以确保删除父记录中的相关记录表也​​被删除(或)删除操作将被级联。