代码之家  ›  专栏  ›  技术社区  ›  sioesi

从表内部联接中删除行

  •  0
  • sioesi  · 技术社区  · 6 年前

    我有个问题,我解释说:

    我有张桌子叫 蒂普库 包含id,nombre_tipo_base的

    我有张桌子叫 蒂波什·利斯塔 包含id、id_tipo_base和lista_id的

    我有张桌子叫 唯一模型 包含id、nombre_modelo和id_tipo_base的

    我有张桌子叫 Lista模型 包含id,id_modelo,id_lista的

    每个 李斯塔身份证 在桌子上 Lista模型 必须在桌子上 蒂波什·利斯塔 ,然后,当我删除 李斯塔身份证 从桌子上 蒂波什·利斯塔 ,它也必须从表中删除 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 回复  |  直到 6 年前
        1
  •  1
  •   Gordon Linoff    6 年前

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

    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;
    

    通常,实现此逻辑的方法是使用级联删除约束。对你来说,我不确定这是否可行。当需要从引用表向外传播更改时,级联触发器非常有用。它们不会跟踪传入的引用,并在没有引用时删除记录。