在知道引用的 table 的主键的情况下,如何从包含外键的 table 中删除?

How do I delete from a table that holds a Foreign Key, knowing the referenced table's Primary Key?

我在 Order:Stops 之间有 1:Many 关系。

Order.OrderId 是主键。 Order.FileNumber 是我要删除的列。

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

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

如果我想删除我知道 Order.FileNumber 的停靠点,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。

您可以像下面这样使用 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),这将确保删除 parent记录 child 中的相关记录 table 也被删除 (OR) 删除操作将被级联。