从表内部联接中删除行

时间:2018-07-11 00:14:21

标签: sql sql-server

我遇到问题了,我解释一下:

我有一个名为 Tipo_Base 的表,其中包含ID nombre_tipo_base

我有一个名为 Tipo_Base_Lista 的表,其中包含ID,id_tipo_base和lista_id

我有一个名为 Modelo_unidad 的表,其中包含ID,nombre_modelo和id_tipo_base

我有一个名为 Modelo_Lista 的表,其中包含ID,id_modelo,id_lista

modelo_lista 中的每个 id_lista 必须存在于表 tipo_base_lista 中,然后,当我删除 id_lista tipo_base_lista 中删除,也必须从表 modelo_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

1 个答案:

答案 0 :(得分:1)

我认为您想要的逻辑更像这样:

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;

通常,实现此逻辑的方法是级联删除约束。就您而言,我不确定这是否可行。当您需要从参考表向外传播更改时,级联触发器非常有用。他们不会跟踪传入的引用,也不会在没有引用的情况下删除记录。