在知道引用的 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) 删除操作将被级联。
我在 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) 删除操作将被级联。