sql – 删除多对多关系中的相关行

前端之家收集整理的这篇文章主要介绍了sql – 删除多对多关系中的相关行前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在删除多对多关系的一个站点上的表中的一行.我还想删除该关系另一侧的任何相关行.

例如,假设我有以下表格,我想从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

当然,您不需要对其进行硬编码,如果您在存储过程中使用此代码段,则可以使用包括参数在内的任何内容.

猜你在找的MsSQL相关文章