我正在删除多对多关系的一个站点上的表中的一行.我还想删除该关系另一侧的任何相关行.
例如,假设我有以下表格,我想从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表.
解决方法
我认为最好的方法是你必须先删除相关表的数据.换句话说,如果您想要删除汽车以及使用该汽车的相应司机,您必须首先删除驱动程序,然后删除汽车.由于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