Sql 从表内部联接中删除行

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

我有个问题,我解释说:

我有一个名为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中删除

请尝试以下操作:

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中,不可能在一条语句中从多个表中删除。