回答

收藏

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

技术问答 技术问答 279 人阅读 | 0 人回复 | 2023-09-14

我想删除一个有多对多关系的网站上的表中行。我还想删除关系另一边的所有相关行。3 p* j6 ^% n2 z  b3 ?
例如,假设我有以下表格,并且想删除一行Cars。我也想删除所有相关的行Drivers,当然,删除任何不再需要的行CarDrivers。
' {  k# _: L+ w) B+ GTable Cars:CarID      intCarName    nvarchar(100)Table DriversriverID   intDriverName nvarchar(100)Table CarDrivers:CarID      intDriver     int我知道怎么在SELECT查询中连接以上表格。但是我看不到如何删除整个关系中的数据。, @0 X) Z  M7 E3 D& v" o! Y* Q2 {3 s
注:关系的两端都实现了级联删除。因此,例如,Cars删除行将删除中的任何相关行CarDrivers。但显然,这不会传播到Drivers表中。
8 t" i4 d+ L' V  V                                                               
' q- I2 y5 a8 I* s+ S. Z. P  S- U    解决方案:                                                                ( ^7 H( J5 ^: w# ]7 Q
                                                                我认为最好的方法是删除相关表的数据。换句话说,如果您想删除汽车和使用汽车的相应驱动程序,您必须在删除汽车之前删除驱动程序。因为,连接表将删除正确的记录ONCASCADE DELETE。( ]$ |$ d3 q6 x. H
试试这个:
! g7 k# f6 C( `, M/ l' G( Udeletefrom Driverswhere 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)deletefrom Carswhere CarID = 1当然,如果您存储在1中,您不需要硬编码proc使用此代码段时,可以使用任何内容,包括参数。
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则