我正在删除位于多对多关系的一个站点上的表中的一行。我还想删除该关系另一端的任何相关行。
例如,假设我有下表,我想从中删除一行Cars
。我还想从中删除任何相关行Drivers
当然,任何不再需要的行CarDrivers
.
Table Cars:
CarID int
CarName nvarchar(100)
Table Drivers:
DriverID int
DriverName nvarchar(100)
Table CarDrivers:
CarID int
Driver int
我知道如何将上面的表格加入SELECT
询问。但我不知道如何删除整个关系中的数据。
注意:关系双方都实现级联删除。因此,例如,删除一行Cars
将删除中的任何相关行CarDrivers
。但显然这不会传播到Drivers
table.
我认为最好的方法是您必须首先删除相关表的数据。换句话说,如果您想删除汽车以及使用该汽车的相应驱动程序,则必须先删除驱动程序,然后再删除汽车。连接表将删除正确的记录,因为ON CASCADE DELETE
.
尝试这个:
delete
from Drivers
where DriverID in
(
select d.DriverID
from Drivers d
inner join CarDrivers cd
on d.DriverID = cd.Driver
inner join Cars c
on c.CarID = cd.CarID
where c.CarID = 1
)
delete
from Cars
where CarID = 1
当然,您不需要硬编码1
在那里,如果您在存储过程中使用此代码片段,则可以使用包括参数在内的任何内容。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)