Maison  >  Questions et réponses  >  le corps du texte

Supprimer de plusieurs tables en une seule instruction

<p>En utilisant MySQL, j'essaie de supprimer plusieurs enregistrements de plusieurs tables à la fois. Au départ, je pensais pouvoir faire ceci : </p> <pre class="brush:php;toolbar:false;">SUPPRIMER t1, t2 DE table1 t1 REJOINDRE table2 t2 SUR t1.id = t2.table1_id REJOINDRE table3 t3 SUR t1.id = t3.table1_id OÙ t1.id IN (?,?,?,?);</pre> <p>Cependant, s'il n'y a aucun enregistrement existant dans la table2, dois-je remplacer <strong>JOIN</strong> par <strong>LEFT JOIN</strong> ? De plus, si je supprime seulement deux ou trois enregistrements des huit tables (2x2x2x2x2x2x2x2), cela entraînera-t-il un retard ? </p>
P粉716228245P粉716228245428 Il y a quelques jours503

répondre à tous(1)je répondrai

  • P粉118698740

    P粉1186987402023-08-19 00:06:31

    Oui, ce sera le cas table2上的连接改为left join会实现您想要的效果。属于列表和table3table1中的行都将被删除,无论它们是否也存在于table2. Dans le même temps, les éventuelles lignes correspondantes seront également supprimées.

    delete t1, t2
    from table1 t1
    left join table2 t2 on t1.id = t2.table1_id
    inner join table3 t3 on t1.id = t3.table1_id
    where t1.id in (?, ?, ?, ?);

    Je recommande que s'il y a un index sur table3上的join重写为exists条件。这样可以更明确地表达查询的意图,并且可能性能更好,特别是如果在table3(table1_id) :

    delete t1, t2
    from table1 t1
    left join table2 t2 on t1.id = t2.table1_id
    where 
        t1.id in (?, ?, ?, ?)
        and exists (select 1 from table3 t3 where t3.table1_id = t1.id)

    répondre
    0
  • Annulerrépondre