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

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

相关文章

(一)日志传送架构 (1.1)相关服务器 主服务器 :用于生产的服务器,上面运行这生产SQL Server数据库...
(一)事故背景 最近在SQL Server 2012生产数据库上配置完事物复制(发布订阅)后,生产数据库业务出现了...
(一)测试目的 目前公司使用的SQL SERVER 2012高可用环境为主备模式,其中主库可执行读写操作,备库既...
(一)背景个人在使用sql server时,用到了sql server的发布订阅来做主从同步,类似MySQL的异步复制。在...
UNION和OR谓词 找出 product 和 product2 中售价高于 500 的商品的基本信息. select * from product wh...
datawhale组队学习task03