当前位置: 首页 > 面试题库 >

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

高运诚
2023-03-14
问题内容

我要删除具有多对多关系的一个站点上的表中的一行。我还想删除该关系另一侧的所有相关行。

例如,假设我有以下表格,并且想从中删除一行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那里进行硬编码,如果您在存储的proc中利用此代码段,则可以使用包括参数在内的任何内容。



 类似资料:
  • 复制和粘贴我前面问题的一些介绍部分。 我在Eclipselink2.3.2中使用JPA2.0,在其中,我在产品和它们的颜色之间建立了多对多的关系。一个产品可以有多种颜色,一种颜色可以与多种产品相关联。这种关系在数据库中由三个表表示。 null 实体类。

  • 我正在使用hibernate多对多的关联。我有3个表(STUDENT,COURSE和STUDENT_COURSE)。在3个表中,2个是主表,1个是提供关系的中间表。当记录从STUDENT中删除时,相应的映射将从Student_Course中删除。我的要求是它甚至应该从课程表中删除记录。考虑以下STUDENT_COURSE条目: 当从学生表中删除101时,上述表中的第一个条目被删除,但课程表中对应于

  • 我目前正在开发一个网络票证系统,并有课程来存储我的票证数据。每个票据都可以有多个相关标签,为了管理这些标签,我创建了一个标签编辑器。这很好,只缺少一个删除选项。到目前为止,大多数删除都失败了,原因是该标签仍然被另一个票证引用,这需要先删除它。在寻找解决方案的过程中,我遇到了CascadeType。删除,这似乎正是我想要的。 但是,由于ticket对象包含一组标签,而不是相反,因此每次我删除一张ti

  • 我还想知道如何定义每个模型上的关系--你是否需要或者是否可以只在用户上定义关系?

  • 文章实体 标签实体 然后我测试新增,随便添加几条数据 查询文章id=1 查询标签id=6 删除文章没问题 但是,删除标签id=6就报错了。服务器错误

  • 问题内容: 我有两个与多对多关联的表。 —数据库片段: 加载 ID 名称 会话 ID 日期 sessionsloads LoadId 的SessionID —hibernate映射片段: 为了从关联表 sessionloads中 删除一个条目,我执行以下代码: 但是,启动后,此代码将保持不变。 删除关联的正确方法是什么? 问题答案: 您需要更新和之间的链接的两端: 实际上,许多开发人员使用防御性方