Sql 从表内部联接中删除行
我有个问题,我解释说: 我有一个名为Tipo_Base的表,其中包含Id,nombre_Tipo_Base 我有一个名为Tipo\u Base\u Lista的表,其中包含Id、Id\u Tipo\u Base和Lista\u Id 我有一个名为Modelo_unidad的表,其中包含Id、nombre_Modelo和Id_tipo_base 我有一个名为Modelo\u Lista的表,其中包含Id,Id\u Modelo,Id\u Lista 表格modelo\u lista的每个id\u lista必须出现在表格tipo\u base\u lista中,然后,当我从表格tipo\u base\u lista中删除id\u lista时,它也必须从表格modelo\u lista中删除 请尝试以下操作:Sql 从表内部联接中删除行,sql,sql-server,Sql,Sql Server,我有个问题,我解释说: 我有一个名为Tipo_Base的表,其中包含Id,nombre_Tipo_Base 我有一个名为Tipo\u Base\u Lista的表,其中包含Id、Id\u Tipo\u Base和Lista\u Id 我有一个名为Modelo_unidad的表,其中包含Id、nombre_Modelo和Id_tipo_base 我有一个名为Modelo\u Lista的表,其中包含Id,Id\u Modelo,Id\u Lista 表格modelo\u lista的每个id\u
DELETE Tbl_modelo_lista
FROM
Tbl_modelo_lista
INNER JOIN Tbl_modelo_unidad as MU ON MU.id_modelo = Tbl_modelo_lista.id_modelo
INNER JOIN Tbl_tipo_base_lista as TBL ON TBL.id_tipo_base = MU.id_tipo_base
WHERE
TBL.id_lista <> Tbl_modelo_lista.id_lista
删除Tbl_modelo_lista
从…起
Tbl_modelo_lista
内部连接Tbl_modelo_unidad作为MU ON MU.id_modelo=Tbl_modelo_lista.id_modelo
内部连接Tbl_tipo_base_lista作为Tbl.id_tipo_base=MU.id_tipo_base上的Tbl
哪里
TBL.id_lista TBL_modelo_lista.id_lista
我认为您想要的逻辑更像这样:
DELETE ml
FROM Tbl_modelo_lista ml INNER JOIN
Tbl_modelo_unidad mu
ON mu.id_modelo = ml.id_modelo LEFT JOIN
Tbl_tipo_base_lista tbl
ON tbl.id_tipo_base = mu.id_tipo_base AND
tbl.id_lista = ml.id_lista
WHERE tbl.id_lista IS NULL;
通常,实现此逻辑的方法是使用级联删除约束。在你的情况下,我不确定这是否有效。当需要向外传播引用表中的更改时,级联触发器非常有用。它们不会跟踪传入的引用并在没有引用时删除记录。实现此行为的一个好方法是在delete CASCADE上使用
,
,这样从tipo_base_lista
中删除一行也会删除modelo_lista
中的相应记录。如果不能这样做,则可能必须使用两个单独的DELETE
语句。在SQL Server中,不可能在一条语句中从多个表中删除。